私はすべてのm4aをmp3に変換しようとしていますが、私のコードは次のようになります。
find . -name '*.m4a' -print0 | while read -d '' -r file; do
ffmpeg -i "$file" -n -acodec libmp3lame -ab 128k "${file%.m4a}.mp3";
done
しかし、最初のmp3ファイルでのみ機能し、次のファイルにエラーが表示されます。
Parse error, at least 3 arguments were expected, only 1 given in string '<All files in one line>'
Enter command: <target>|all <time>|-1 <command>[ <argument>]
これらのファイルには、スペース、アンパサンド、および括弧が含まれています。
ベストアンサー1
ファイルを1行ずつ読み取るときにループ内のコマンドがstdinも読み取ると、入力ファイルが使い果たされる可能性があります。
ここで読んでください:バッシュFAQ 89
したがって、コードは次のようになります。
find . -name '*.m4a' -print0 | while read -d '' -r file; do
ffmpeg -i "$file" -n -acodec libmp3lame -ab 128k "${file%.m4a}.mp3" < /dev/null
done