シェル スクリプトの修正版は、オーディオ ファイルを FLAC から MP3 形式に変換します。コンピューターにはクアッドコア CPU が搭載されています。スクリプトは次を使用して実行されます。
./flac2mp3.sh $(find flac -type f)
これにより、ディレクトリ内の FLAC ファイル(ファイル名にスペースなし) がディレクトリ内 ( と同じレベル)flac
の MP3 ファイルに変換されます。コピー先の MP3 ファイルが既に存在する場合、スクリプトはそのファイルをスキップします。mp3
flac
問題は、スクリプトの 2 つのインスタンスが同じ MP3 ファイルの存在をほぼ同時にチェックすることがあり、その結果、MP3 ファイルが壊れることがあります。
コマンドラインごとに異なるファイルセットを指定したり、作業を上書きしたりせずに、スクリプトを複数回 (つまり、コアごとに 1 回) 実行するにはどうすればよいでしょうか?
更新 - 最小限の競合状態
このスクリプトは、次のロック メカニズムを使用します。
# Convert FLAC to MP3 using tags from flac file.
#
if [ ! -e $FLAC.lock ]; then
touch $FLAC.lock
flac -dc "$FLAC" | lame${lame_opts} \
--tt "$TITLE" \
--tn "$TRACKNUMBER" \
--tg "$GENRE" \
--ty "$DATE" \
--ta "$ARTIST" \
--tl "$ALBUM" \
--add-id3v2 \
- "$MP3"
rm $FLAC.lock
fi;
ただし、これでも競合状態が残ります。