我有一系列包含多個mp3文件的目錄,文件名爲001.mp3,002.mp3,...,030.mp3。在執行命令之前排序find的輸出-exec
我想要做的就是把它們放在一起整理成一個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
有時候這工作,我也得到以正確的順序所有的「軌道」的單個文件。
但是,更多的時候,我會以相反的順序得到一個包含所有「曲目」的單個文件,這實際上並不好。
我不明白的是,爲什麼順序在腳本的不同運行之間變化,因爲所有目錄都包含相同的一組文件名。我倒過了手冊頁,找不到排序選項。
我可以運行find . -iname '*.mp3' | sort -n >> temp.txt
將文件放到一個臨時文件中,然後嘗試循環,但我無法得到與跛腳一起工作。
有沒有什麼辦法可以在找到之前進行排序運行exec?我可以通過-exec ls
在這裏和其他地方找到大量的例子,但不是在那裏需要執行exec更復雜的事情。
在這裏推動我自己的bash能力的邊界,但我可以做些什麼,比如'find。 -iname'* .mp3'| sort -n | xargs'?如果是的話,我將如何重新安排lame命令來進行輸入? –
yknivag
temp.txt包含完整路徑還是隻包含一系列文件名? –
如果可能,我寧願不使用臨時文件。但它可能被構造爲包含任何類型的文件名。 – yknivag