Script de suppression des caractères accentué
padz
-
Liloulinx -
Liloulinx -
Bonjour,
je cherche (depuis 2 jours) un shell script qui permette de supprimer les caractères accentués dans mes noms de fichier. j'ai trouvé du php, du python, du perl, du javascript, mais pas shell script.
Or : je n'arrive pas à croire que ca n'ait pas été fait déjà ??!!:):)
merci à tous.
je cherche (depuis 2 jours) un shell script qui permette de supprimer les caractères accentués dans mes noms de fichier. j'ai trouvé du php, du python, du perl, du javascript, mais pas shell script.
Or : je n'arrive pas à croire que ca n'ait pas été fait déjà ??!!:):)
merci à tous.
Configuration: Linux Debian Mozilla 1.8.1.6
6 réponses
-
Méthode avec "sed" :
[lol]$ ls -1 bîbïBÔö.txt ÇàVÀ.txt GÉGÉ.txt màmÀ.txt mémé.txt ùlûlü.txt [lol]$ for i in $(ls *.txt);do mv ${i} $(echo "$i" |sed 'y/àçéèëêïîöôùüûÀÇÉÈËÊÏÎÖÔÙÜÛ/aceeeeiioouuuACEEEEIIOOUUU/');done [lol]$ ls -1 bibiBOo.txt CaVA.txt GEGE.txt mamA.txt meme.txt ululu.txt [lol]$Méthode avec "tr" :[lol]$ ls -1 bîbïBÔö.txt ÇàVÀ.txt GÉGÉ.txt màmÀ.txt mémé.txt ùlûlü.txt [lol]$ for i in $(ls *.txt);do mv ${i} $(echo "$i" |tr 'àçéèëêïîöôùüûÀÇÉÈËÊÏÎÖÔÙÜÛ' 'aceeeeiioouuuACEEEEIIOOUUU');done [lol]$ ls -1 bibiBOo.txt CaVA.txt GEGE.txt mamA.txt meme.txt ululu.txt [lol]$;-))
-
-
Bonjour.
J'ai rédigé rapidement le script ci-dessous mais il ne marche pas avec des nom de fichiers qui ont des espaces. Avez-vous une idée comment l'améliorer ? Le problème est dans lefor i in $(ls $nom_rep/)
où le i prend chacun des mots qui forment le nom d'un fichier qui contient des espaces au lieu de prendre le nom entier. J'ai mis la commande et le nom entre double-cotes, ça s'est amélioré un peu, mais le pb persiste !
echo "Ce script remplace les caractères accentués des noms des fichiers d'un repertoire donné par des caractères non accentués." read -p 'Nom du rep (incluant le chemin) : ' nom_rep echo "Le nom du rep donné est : $nom_rep" if [ ! -e $nom_rep ]; then echo "Rep n'existe pas" else if [ -d $nom_rep ]; then for i in $(ls $nom_rep/) do echo " tentative of renaming (mouving) of the file $i" mv $nom_rep/${i} $nom_rep/$(echo $i |sed 'y/ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ/aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby/') done else if [ -f $nom_rep ]; then echo "Vous avez tapé le nom d'un fichier et nom pas d'un rep" fi fi fi -
-
Bonjour.
Oui, je n'ai pas bien vu. J'ai mis 2 fois le $. C'était lors des tests.
Sinon, je l'ai changé en comme ceci:#!/bin/bash echo "Ce script remplace les caractères accentués des noms des fichiers d'un repertoire donné par des caractères non accentués." read -p 'Nom du rep (incluant le chemin) : ' nom_rep echo "Le nom du rep donné est : $nom_rep" if [ ! -e $nom_rep ]; then echo "Rep n'existe pas" else if [ -d $nom_rep ]; then for i in $nom_rep/* do echo " Tentative de renomer le fichier $i" nouveau_nom='echo "$i"|sed 'y/àçéèëêïîöôùüûÀÇÉÈËÊÏÎÖÔÙÜÛ/aceeeeiioouuuACEEEEIIOOUUU/'' echo "nouveau_nom= " $nouveau_nom mv "${i}" "$nouveau_nom" done else if [ -f $nom_rep ]; then echo "Vous avez tapé le nom d'un fichier et nom pas d'un rep" fi fi fi
Cette fois-ci ça marche car dans la ligne correspondant à la commande mv, j'ai mis mes variables de fichier source et fichier destination entre double-quottes.
root@vp:/# ls /rep_test/ mémé tété.bébé sébastien.fr Sécuriser où il faut.txt root@vp:/# /root/script_changer_noms_fichiers_rep.sh Ce script remplace les caractères accentués des noms des fichiers d\'un repertoire donné par des caractères non accentués. Nom du rep (incluant le chemin) : /rep_test Le nom du rep donné est : /rep_test Tentative de renomer le fichier /rep_test/mémé tété.bébé Tentative de renomer le fichier /rep_test/sébastien.fr Tentative de renomer le fichier /rep_test/Sécuriser où il faut.txt root@vp:/# ls /rep_test/ meme tete.bebe sebastien.fr Securiser ou il faut.txt
Merci pour votre aide.
-
-
Salut,
Tu peux faire ça soit avec la commande "tr" soit avec "sed" :tr 'àçéèëêïîöôùüûÀÇÉÈËÊÏÎÖÔÙÜÛ' 'aceeeeiioouuuACEEEEIIOOUUU' sed 'y/àçéèëêïîöôùüûÀÇÉÈËÊÏÎÖÔÙÜÛ/aceeeeiioouuuACEEEEIIOOUUU/'
Libre à toi d'adapter l'une ou l'autre dans ton script...
;-)) -
hello
il y a les commandes dos2unix et unix2dos -
The dos2unix utility converts characters in the DOS extended character set to the corresponding ISO standard characters
je ne peux pas tester, mais je crois me souivenir que oui, bien que la queston du sujet soit "supprimmer" et pas convertir -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Merci pour ces réponses ;)
pour les commandes "tr" et "sed", jai essayé mais ca n'a pas l'air de marcher (je perds l'invite, ca clignote puis rien)
(J'ai essayé à la fois en passant directement la commande dans une fenêtre terminal et dans un script).
Aurais-je loupé un étage ? -
Bonjour,
J'ai rédigé rapidement le script ci-dessous mais il ne marche pas avec des nom de fichiers qui ont des espaces. Avez-vous une idée comment l'améliorer ? Le problème est dans lefor i in $(ls $nom_rep/)
où le i prend chacun des mots qui forment le nom d'un fichier qui contient des espaces au lieu de prendre le nom entier. J'ai mis la commande et le nom entre double-cotes, ça s'est amélioré un peu, mais le pb persiste !echo "Ce script remplace les caractères accentués des noms des fichiers d'un repertoire donné par des caractères non accentués." read -p 'Nom du rep (incluant le chemin) : ' nom_rep echo "Le nom du rep donné est : $nom_rep" if [ ! -e $nom_rep ]; then echo "Rep n'existe pas" else if [ -d $nom_rep ]; then for i in $(ls $nom_rep/) do echo " tentative of renaming (mouving) of the file $i" mv $nom_rep/${i} $nom_rep/$(echo $i |sed 'y/ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ/aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby/') done else if [ -f $nom_rep ]; then echo "Vous avez tapé le nom d'un fichier et nom pas d'un rep" fi fi fi