このスクリプトのコンパイルには時間がかかりすぎました (!!) が、最終的には、必要な機能を備えた適切なスクリプトを作成できました。
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 ファイルを 1 つのコマンドとして metaflac に渡す必要があることです。ご覧のとおり、 を使用してこれを達成しましたfind ... -exec ... +
。
私が疑問に思っているのは、これを行うためのよりエレガントな方法があるかどうかです。while
特に、ループをスキップするにはどうすればよいですか? find
すでにディレクトリを反復処理しているため、これは不要なはずです。