我有以下问题:想象一下,你有一个名为" Music"的目录。在那里,在各种子目录中,有以.flac结尾的文件 我想写一个bash脚本,找到所有这些文件和每个文件 转换到找到的目录,.mp3文件和(可选)如果正确创建此文件以删除原始.flac文件。
我尝试了以下代码,我通过收集来自不同地方的点点滴集来构建,我将其留下作为我想要实现的更正式的指示:
#!/bin/bash
find ./Music -type f -name "*.flac" -print0 | while read -d $'\0' a; do
echo "converting file: $a"
# Get File name
FN=`echo $a | sed 's/.\{5\}$//'`
# Convert to mp3
ffmpeg -i "$FN.flac" -ab 320k -map_metadata 0 -id3v2_version 3 -y "$FN.mp3"
# If converted correctly delete
if [ -f "$FN.mp3" ]; then
echo "done"
rm "$a"
fi
done
使用ffmpeg是可选的(但首选) 在此先感谢您的帮助!
答案 0 :(得分:2)
尝试:
find ./Music -type f -name "*.flac" -execdir sh -c 'ffmpeg -i "$1" -ab 320k -map_metadata 0 -id3v2_version 3 -y "${1%.flac}.mp3" && rm "$1"' Cvt {} \;
find ./Music -type f -name "*.flac"
搜索名称以-type f
结尾的目录./Music
下的常规文件(.flac
)。
-execdir sh -c '...' Cvt {} \;
对于这些文件,启动shell并在引号中运行命令。 flac文件的名称作为参数1提供给shell脚本:$1
。
Cvt
已分配给$0
,如果shell脚本生成错误,您将看到它。
shell脚本包括:
ffmpeg -i "$1" -ab 320k -map_metadata 0 -id3v2_version 3 -y "${1%.flac}.mp3"
运行您找到的ffmpeg
命令。
&&
仅当前面的命令成功(错误代码= 0)时才继续执行以下命令。
rm "$1"
删除原始的flac文件。