pense-bête de bruno sanchiz

Accueil > Linux > Lignes de commandes > changer les noms des fichiers ( caractères spéciaux )

changer les noms des fichiers ( caractères spéciaux )

Publié le 8 mars 2007, dernière mise-à-jour le 19 mars 2017, 7 visites, 23100 visites totales.

(2007)

changer les accents en lettres correspondantes :

for i in * ; do mv "$i" <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZWNobyAkaSB8IHRyICZxdW90O8Oiw6DDpMOnw6nDqMOqw6vDrsOvw7TDtsO5w7zDgsOHw4nDiMOKw4vDjsOPw5TDlsOZw5zigJkgLCA7IDogPyQlJnF1b3Q7ICZxdW90O2FhYWNlZWVlaWlvb3V1QUNFRUVFSUlPT1VVX19fX19fX18mcXVvdDs8L2NvZGU+"></span> ; done
tout mettre en minuscule :

for i in * ; do mv "$i" <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZWNobyAkaSB8IHRyICZxdW90O0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJnF1b3Q7ICZxdW90O2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JnF1b3Q7PC9jb2RlPg=="></span> ; done
les deux combinés :

for i in * ; do mv "$i" <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZWNobyAkaSB8IHRyICZxdW90O0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaw6DDp8Opw6jDqsOrw67Dr8O0w7bDucO8w4LDh8OJw4jDisOLw47Dj8OUw5bDmcOc4oCZICwgOyA6ID8kJSZxdW90OyAmcXVvdDthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5emFjZWVlZWlpb291dWFjZWVlZWlpb291dV9fX19fX19fJnF1b3Q7PC9jb2RlPg=="></span> ; done
explications

for
la syntaxe est for i in * ; do ...... ; done
traduction : pour ( for ) chaque fichier dans le répertoire, on nomme i ( ou $i ) ce fichier, on fait (do ) des trucs et c’est fini ( done )
mv nom1 nom2 : change le nom de nom1 en nom2
mv "$i" nom2 : change chaque fichier du "for" en nom2, le nom2 étant transformé par la formule suivante
echo
notez les ( 7 sur pc105 ) qui permettent de faire une commande       <code>echo $i | tr "à" "a" </code>: affiche ( echo ) le fichier ( $i ) et si tu trouves à tu le remplaces par a    conclusion   <code> for i in * ; do mv "$i"echo $i | tr "àç" "ac"; done </code> pour chaque fichier dans le répertoire, change son nom en un nom où les à ont été remplacés par des a et les ç par c ; il suffit de rajouter ce qu on veut dans les guillemets. changer aussi dans les sous-répertoires mettre dans un fichier change_nom_sousrep.sh le rendre exécutable ( chmod a+x change_nom_sousrep.sh ou clic droit/propriétés) le lancer en console en tapant change_nom_sousrep.sh rep : si le répertoire "rep" est oublié, rien ne se passe par sécurité. attention les $ ne sont pas changés et ne peuvent pas l’être pas cette méthode ni pour l’instant les espaces <code> echo "debut du script" echo "si aucune ligne n'est affichée c'est qu'aucun changement n'a été effectué" if [ "$1" != "" ]; then { for file infind ./$1do if [ "$file" != ./$1 ]; then { aa=echo "$file" |sed "s/â/a/g" |sed "s/à/a/g" |sed "s/ä/a/g" |sed "s/à/a/g" |sed "s/ç/c/g" |sed "s/é/e/g" |sed "s/è/e/g" |sed "s/ê/e/g" |sed "s/ë/e/g" |sed "s/î/i/g" |sed "s/ï/i/g" |sed "s/ô/o/g" |sed "s/ö/o/g" |sed "s/ù/u/g" |sed "s/ü/u/g" |sed "s/Â/A/g" |sed "s/Ç/C/g" |sed "s/É/E/g" |sed "s/È/E/g" |sed "s/Ê/E/g" |sed "s/Ë/E/g" |sed "s/Î/I/g" |sed "s/Ï/I/g" |sed "s/Ô/O/g" |sed "s/Ö/O/g" |sed "s/Ù/U/g" |sed "s/Ü/U/g" |sed "s/ /_/g" |sed "s/,/_/g" |sed "s/ ;/_/g" |sed "s/ :/_/g" |sed "s/ ?/_/g" |sed "s/%/_/g" |sed "s/’/_/g"`
if [ "$aa" != "$file" ] ; then

mv -v "$file" "$aa"
#echo "$file"

fi

fi
done

fi
echo "fin du script"

[bruno sanchiz]