我有以下问题:想象一下,你有一个名为“音乐”的目录,在那里,在各种子目录中,有以.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是可选的(但首选)。 在此先感谢您的帮助!
尝试:
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文件。