我有一系列包含多个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