tobast.fr - programmation, sites web, ...

Ajouté le 27/10/2011.

note : - /10

renamemp3

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

Poster un commentaire