Modifier les accentués dans les noms de fichiers
De wikiGite
Révision datée du 17 janvier 2018 à 11:49 par Frank (discussion | contributions) (Page créée avec « Le script suivant permet de trouver les noms de fichiers ou répertoires avec des caractères accentués non reconnus (ce qui apparaît comme "?" ou "é"), et de les rem... »)
Le script suivant permet de trouver les noms de fichiers ou répertoires avec des caractères accentués non reconnus (ce qui apparaît comme "?" ou "é"), et de les remplacer par des accents en UTF-8.
Une première passe s'occupe des noms de répertoires, sinon le script ne trouverait plus les fichiers à l'intérieur une fois qu'il a lui-même modifié les noms du répertoires ! Ensuite il refait une passe pour les fichiers.
Ici, on a choisit de modifier le nom en le faisant précéder d'un "_", afin d'être sûr de ne pas écraser un fichier qui aurait été auparavant manuellement dupliqué avec les bon accentué.
#!/bin/bash
grep-invalid-utf8 () {
perl -l -ne '/^([\000-\177]|[\300-\337][\200-\277]|[\340-\357][\200-\277]{2}|[\360-\367][\200-\277]{3}|[\370-\373][\200-\277]{4}|[\374-\375][\200-\277]{5})*$/ or print'
}
IFS='
'
# first pass for rename directories...
for file in `find /home -type d | grep-invalid-utf8`
do
filename=`basename "$file"`
dirname=`dirname "$file"`
newname=`echo $filename | iconv -f latin1 -t utf8`
echo mv "$file" "$dirname/_${newname}"
mv "$file" "$dirname/_${newname}"
done
# ... then files in all directories renamed or not
for file in `find /home | grep-invalid-utf8`
do
filename=`basename "$file"`
dirname=`dirname "$file"`
newname=`echo $filename | iconv -f latin1 -t utf8`
echo mv "$file" "$dirname/_${newname}"
mv "$file" "$dirname/_${newname}"
done