Convert all files of .flac format found in any sub-directory of main directory to .mp3
我遇到以下问题:假设您有一个名为" Music"的目录,并且在其中的各个子目录中都有以.flac结尾的文件。
我想编写一个bash脚本来查找所有这些文件,并针对每个文件
转换为找到的目录,.mp3文件,以及(可选)在正确创建此文件以删除原始.flac文件的情况下进行的转换。
我尝试了以下代码,该代码是通过从各个地方收集点点滴滴而构建的,这些代码作为我要实现的目标的更正式说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/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是可选的(但首选)。
预先感谢您的帮助!
尝试:
1 | 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 {} \\; |
怎么运行的
在目录
对于这些文件,启动外壳并运行带引号的命令。 flac文件的名称作为参数1:
提供给Shell脚本。
。
shell脚本包括:
-
ffmpeg -i"$1" -ab 320k -map_metadata 0 -id3v2_version 3 -y"${1%.flac}.mp3" 运行找到的
ffmpeg 命令。 -
&& 仅在先前命令成功执行(错误代码= 0)时,才继续执行以下命令。
-
rm"$1" 删除原始flac文件。