shell 脚本的修改版本将音频文件从 FLAC 转换为 MP3 格式。该计算机具有四核 CPU。该脚本使用以下命令运行:
./flac2mp3.sh $(find flac -type f)
这会将flac
目录中的 FLAC 文件(文件名中没有空格)转换为目录中的 MP3 文件mp3
(与 同级flac
)。如果目标 MP3 文件已存在,则脚本会跳过该文件。
问题是有时脚本的两个实例几乎同时检查是否存在同一个 MP3 文件,从而导致 MP3 文件损坏。
您将如何多次运行脚本(即每个内核一次),而不必在每个命令行上指定不同的文件集,并且不覆盖工作?
更新 - 最小竞争条件
该脚本使用以下锁定机制:
# 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;
但是,这仍然留下了竞争条件。