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, 9 visites, visites totales.
(2007)
changer les accents en lettres correspondantes :
for i in * ; do mv "$i" <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZWNobyAkaSB8IHRyICZxdW90O8Oiw6DDpMOnw6nDqMOqw6vDrsOvw7TDtsO5w7zDgsOHw4nDiMOKw4vDjsOPw5TDlsOZw5zigJkgLCA7IDogPyQlJnF1b3Q7ICZxdW90O2FhYWNlZWVlaWlvb3V1QUNFRUVFSUlPT1VVX19fX19fX18mcXVvdDs8L2NvZGU+"></span> ; done
tout mettre en minuscule :
for i in * ; do mv "$i" <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZWNobyAkaSB8IHRyICZxdW90O0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJnF1b3Q7ICZxdW90O2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JnF1b3Q7PC9jb2RlPg=="></span> ; done
les deux combinés :
for i in * ; do mv "$i" <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+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 in
find ./$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"