Ajouté le 27/10/2011.
- /10
Script assez simple en soi permettant de renommer tous les fichiers .mp3 du dossier courrant sur le schéma "[num]-[nomChanson].mp3", en se basant sur les tags du fichier mp3 (utilise mp3info).
Si les tags concernant le n° de piste sont vides, le script essayera de se baser sur le nom du fichier en prenant toute la suite de chiffres au début du nom comme numéro de piste.
Si les tags concernant le nom de piste sont vides, le script essayera de se baser sur le nom du fichier en prenant la partie entre le dernier tiret et le .mp3.
Le script demandera (une fois pour toutes) si il faut utiliser le nom de fichier comme base dans ces cas, sauf si l'option -f est présente.
#!/bin/bash
passChecks=1 # 0 -> never, 1 -> ask, 2 -> always
while (( $# > 0 )); do
if (( "$1" == "-f" ))
then passChecks=2
fi
shift
done
for i in *;do # List dir files
if [[ "$i" != *.mp3 ]]; then
continue
fi
tracknum=`mp3info "$i" -p "%n"`
if [[ $tracknum == "" ]]; then # empty track num
ok=0
case $passChecks in
2)
ok=1
;;
1)
echo "Numéro de piste absent. Tenter de se baser sur le nom du fichier ? (Y/n)"
read in
if [[ "$in" == "n" ]]; then
ok=0
else
ok=1
passChecks=2
fi
;;
0)
ok=0
;;
esac
if (( $ok )); then
tracknum=`expr match "$i" '\(^[0-9]\+\)'`
mp3info "$i" -n "$tracknum"
else
continue
fi
elif (( $tracknum < 10 )); then
tracknum=`echo "0$tracknum"`
fi
tracktitle=`mp3info "$i" -p "%t"`
if [[ "$tracktitle" == "" ]]; then
ok=0
case $passChecks in
2)
ok=1
;;
1)
echo "Nom de piste absent. Tenter de se baser sur le nom du fichier ? (Y/n)"
read in
if [[ "$in" == "n" ]]; then
ok=0
else
ok=1
passChecks=2
fi
;;
0)
ok=0
;;
esac
if (( $ok )) ; then
todel=`echo ${i%-*}`
name=`echo ${i#$todel}`
name=`echo ${name#-}`
name=`echo ${name%.mp3}`
mp3info "$i" -t "$name"
tracktitle=$name
else
continue
fi
fi
trackname=`echo "${tracknum}-${tracktitle}.mp3"`
if [[ "$i" != "$trackname" ]]
then mv "$i" "$trackname"
fi
done