このコードに問題があります。
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