我有一系列包含多个mp3文件的目录,文件名分别为001.mp3、002.mp3,...,030.mp3。
我想要做的是将它们全部按顺序放入单个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
将文件放在一个临时文件中,然后尝试遍历该文件,但是我无法将其与la脚一起使用。
有什么办法可以在find运行exec之前进行排序吗?我在这里和其他地方可以找到很多-exec ls
使用exec进行操作的示例,但在需要使用exec执行更复杂的操作的地方却找不到。
find . -iname '*.mp3' -print0 | sort -zn | xargs -0 -I '{}' lame --decode '{}' - | lame --tt "$title_prefix$name" --ty "${name:5}" --ta "$artist" --tl "$album" -b 64 - $final_path"${d%/}".mp3
未经测试,但可能值得一试。
通常,xargs
将参数附加到您给它的命令的末尾。该-I
选项告诉它替换给定的字符串({}
在这种情况下)。
编辑:我已经添加了-print0
,-z
,-0
以确保管道仍然有效,即使你的文件名包含换行符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句