ls -lはディレクトリ内のファイル名を関連付けるようです。

ls -lはディレクトリ内のファイル名を関連付けるようです。

ディレクトリ内のすべての.oggファイルを.mp3ファイルに変換するシェルスクリプトを作成したいと思います。ファイル名にスペースが含まれているため、コマンドシーケンスで二重引用符を使用しています。私が使用するコマンドは

for FILE in "`ls -1 *.ogg`" ; do
    ROOTFILE=`printf "%s\n" "$FILE" | sed "s/ogg//" `
    ffmpeg -i "$FILE" "$ROOTFILE"mp3
done

ただし、ディレクトリ内のすべてのファイル名はffmpegによって文字列として扱われます。ファイル名内のスペースを保持しながら、個々のファイル名をどのように区別できますか?

ベストアンサー1

すべてのコメントを要約します(作成者:エリック・レノフスチールドライバーカス)問題の解決策は次のとおりです。

for f in *.ogg; do
    ffmpeg -i "$f" "${f%.ogg}.mp3"
done

これにより、試行中にいくつかの問題を回避できます。

  • 解析されたls出力;
  • 再発明basename(上記で説明したように、独自のシェル文字列処理に置き換えることができます)。

おすすめ記事