現在のフォルダ内のすべてのファイルを複数の拡張子に変換し、bashを使用して名前を保持するきちんとした方法

現在のフォルダ内のすべてのファイルを複数の拡張子に変換し、bashを使用して名前を保持するきちんとした方法

さまざまな種類のファイルを含むフォルダがあります。たとえば、すべてのエンディングを変換したいと思います。

.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正しく処理されます。

おすすめ記事