Une version modifiée d'un shell script convertit un fichier audio de FLAC au format MP3. L'ordinateur a un processeur quad-core. Le script est exécuté en utilisant:Synchronisation de l'exécution du script shell
./flac2mp3.sh $(find flac -type f)
Il convertit les fichiers FLAC dans le répertoire flac
(sans espaces dans les noms de fichiers) aux fichiers MP3 dans le répertoire mp3
(au même niveau que flac
). Si le fichier MP3 de destination existe déjà, le script ignore le fichier.
Le problème est que parfois deux instances du script vérifient l'existence du même fichier MP3 presque au même moment, ce qui entraîne des fichiers MP3 altérés.
Comment exécuter le script plusieurs fois (c'est-à-dire, une fois par cœur), sans avoir à spécifier un jeu de fichiers différent sur chaque ligne de commande et sans écraser le travail?
Mise à jour - Race Condition minimale
Le script utilise le mécanisme de verrouillage suivant:
# 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;
Cependant, il reste encore une condition de course.
Toute raison de ne pas simplement utiliser 'lockfile'? – ezpz