BASH: ループ ls [繰り返し]

BASH: ループ ls [繰り返し]

このコードに問題があります。

22 for filename in "$( ls "$1" | grep ".*\.flac$" )"; do
23                 file_path="$1${filename}"
24                 ffmpeg -i "${file_path}" -f ffmetadata $HOME/metadata

各反復のメタデータファイルの代わりに、次のエラーメッセージが表示されます。

ダウンロード/Ariel PinkのHaunted Graffiti - Worn Copy (2005)/01 Trepanated Earth.flac...17. ギザギザのカーニバルツアー.flac:ファイル名が長すぎます。

したがって、ループ内の $filename 変数は、一緒に囲まれたすべての FLAC ファイルの名前と同じように見えます。

もちろん、22行目で引用符を省略すると、空白の問題が発生します。

これをどのように実行しますか?私は初めてbashに触れ、とても混乱しています。

答え1

どうですか?

 for filepath in "$1/"*.flac 
 do
      ffmpeg -i "${file_path}" -f ...

どこ

  • "$1/"*.flac最後に、.flac サフィックスが保証されます。
  • 必ず引用してください"${file_path}"
  • デフォルト名は、次のコマンドを使用して見つけることができます。bn=$(basename "${file_path}")
  • タグ付けされていないデフォルト名は、以下を使用して見つけることができます。bnnf=$(basename "${file_path}" .flac)

サンプル

A > ls -l Music 
total 0
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 foo bar
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 foo bar.flac
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 fubar
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 fubar.flac

次に、次を実行します。

 A > for f in Music/*.flac; do echo $f; ls -l "$f" ; done 
Music/foo bar.flac
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 Music/foo bar.flac
Music/fubar.flac
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 Music/fubar.flac

関連情報