这个脚本花了我太长时间(!!)来编译,但我终于有了一个相当不错的脚本,它可以满足我的需求:
find "$@" -type d -print0 | while IFS= read -r -d $'\0' dir; do
find "$dir" -iname '*.flac' -maxdepth 1 ! -exec bash -c '
metaflac --list --block-type=VORBIS_COMMENT "$0" 2>/dev/null | grep -i "REPLAYGAIN_ALBUM_PEAK" &>/dev/null
exit $?
' {} ';' -exec bash -c '
echo Adding ReplayGain tags to "$0"/\*.flac...
metaflac --add-replay-gain "${@:1}"
' "$dir" {} '+'
done
目的是在文件树中搜索包含 FLAC 文件的目录,测试是否缺少REPLAYGAIN_ALBUM_PEAK
标签,并扫描该目录中的所有文件以查找 ReplayGain(如果缺少)。
最大的障碍是给定专辑的所有 FLAC 文件必须作为一个命令传递给 metaflac,否则 metaflac 不知道它们都是一张专辑。如您所见,我已经使用find ... -exec ... +
.
我想知道是否有更优雅的方式来做到这一点。特别是,我怎样才能跳过while
循环?当然这应该是不必要的,因为find
已经在遍历目录?