ファイル名が001.mp3、002.mp3、...、030.mp3の複数のmp3ファイルを含む一連のディレクトリがあります。-execでコマンドを実行する前にfindの出力をソート
私がしたいのは、それらをまとめて1つのmp3ファイルにまとめて、そこにいくつかのメタデータを追加することです。
#!/bin/bash
for d in */; do
cd $d
find . -iname '*.mp3' -exec lame --decode '{}' - ';' | lame --tt "$title_prefix$name" --ty "${name:5}" --ta "$artist" --tl "$album" -b 64 - $final_path"${d%/}".mp3
cd ..
done
は時々、この作品と私は、正しい順序ですべての「トラック」を持つ単一のファイルを取得:
は、ここで私は(明確にするため、いくつかの変数定義を削除)現時点で持っているものです。
しかし、私はすべての "トラック"が逆の順序で1つのファイルを取得することがよくありますが、これは実際には良くありません。
私が理解できないのは、すべてのディレクトリに同じファイル名が含まれているため、スクリプトの実行によって順序が異なる理由です。私はマニュアルページを読みましたが、findのソートオプションを見つけることができません。
私はfind . -iname '*.mp3' | sort -n >> temp.txt
を実行してファイルを一時ファイルに入れてからそれを試してみることができますが、私はそれをラメで使うことができません。
findがexecを実行する前に並べ替えを行う方法はありますか?私はここで多くの例を見つけることができ、-exec ls
でこれをやっていますが、どこでもっと複雑なものをexecで実行する必要があるかはわかりません。
ここに私自身のbash能力の境界を押しても、私は 'findのようなことをすることができます。 -iname '* .mp3' |ソート-n | xargs '?もしそうなら、私はどのように入力を取るためにラメコマンドを再配置するだろうか? –
yknivag
temp.txtには完全なパスまたは一連のファイル名のみが含まれていますか? –
可能であれば、私はむしろ一時ファイルを全く使用しません。しかし、それはおそらく任意のタイプのファイル名を含むように構築することができます。 – yknivag