Script de suppression des caractères accentué

Fermé
padz - 8 oct. 2007 à 23:18
 Liloulinx - 23 nov. 2013 à 23:00
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.
A voir également:

6 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
9 oct. 2007 à 20:36
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]$
;-))
2
Merci à toi !

Le savoir est la seule ressource qui s'accroit lorsqu'on la partage
0
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 le
for 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
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
22 nov. 2013 à 15:10
Salut,

Le problème est dans le
for i in $(ls $nom_rep/)

Ben forcément, on ne boucle jamais sur la sortie de la commande
ls
;-(

for i in $nom_rep/*
0
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.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
8 oct. 2007 à 23:34
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...

;-))
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
9 oct. 2007 à 10:21
hello
il y a les commandes dos2unix et unix2dos
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
9 oct. 2007 à 10:37
Salut dubcek,

Euh... t'es sûr que ces 2 commandes convertissent les caractères accentués ?

;-))
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
9 oct. 2007 à 15:14
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
0

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 ?
0
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 le
for 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
0