見つかったすべてのm4aをmp3に変換する

見つかったすべてのm4aをmp3に変換する

私はすべての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

おすすめ記事