我尝试对find找到的每个文件执行操作 - 使用特定的文件扩展名(wma)。例如,在python中,我只需编写以下脚本:
for file in os.listdir('.'):
if file.endswith('wma'):
name = file[:-4]
command = "ffmpeg -i '{0}.wma' '{0}.mp3'".format(name)
os.system(command)
我知道我需要执行类似于
的操作find -type f -name "*.wma" \
exec ffmpeg -i {}.wma {}.mp3;
但显然这不起作用,否则我不会问这个问题=]
答案 0 :(得分:2)
坚持基础知识总能完成工作(不处理文件名中的空格):
for f in $(find "." -type f -name "*.wma"); do ffmpeg -i "$f" "${f//wma/mp3}"; done
从下面的konsolebox建议开始,我想出了这个完整版本:
find "." -type f -name "*.wma" | while read -d $'\n' f; do ffmpeg -i "$f" "${f//wma/mp3}"; done
答案 1 :(得分:2)
大多数情况下,解析输入时使用read
比使用for
进行单词拆分并依赖IFS
更好,因为存在意外路径名的风险扩展
while IFS= read -u 4 -r LINE; do
ffmpeg -i "$LINE" "${LINE%.*}.mp3"
done 4< <(exec find -type f -name '*.wma')
或使用readarray
(Bash 4.0 +)
readarray -t FILES < <(exec find -type f -name '*.wma')
for FILE in "${FILES[@]}"; do
ffmpeg -i "$FILE" "${FILE%.*}.mp3"
done