さまざまな種類のファイルを含むフォルダがあります。たとえば、すべてのエンディングを変換したいと思います。
.ogg .flac, .m4a
このように動作するコマンドを使用してください
converter inputfilename outputpath/ouputfilename.outputextension
頑張りました
for audfile in *.ogg *.m4a *.flac; do
filename=${audfile%.*}
converter "$audfile" "done/$audfile.mp3"
done
これはまた、一致するファイルを持たないすべての拡張子に対してそのファイルまたはディレクトリがないことを印刷する問題もあります(一致しない形式を無視する方がエレガントです)。このタスクを正確かつ簡潔に行う方法をどのように提案しますか?
答え1
人々はしばしばディレクトリ出力を繰り返すべきではないと言いますが、私の考えでは、ワイルドカードは*
ワイルドカードに似ているようです。
代わりにこの-exec
オプションを使用する必要があります。find
find . -maxdepth 1 -name "*.ogg" -exec converter {} done/{}.mp3 \;
これは、「現在のディレクトリで.oggで終わるすべてのファイルを探して(もう見ていない)、コマンドコンバータfilename.ogg did / filename.ogg.mp3を実行してください」と言います。
findコマンドは、実行する必要があるすべてのエスケープを処理する必要があるため、The Hedgehog Song.ogg
すべてThe_Hedgehog_Song.ogg
正しく処理されます。