Outils personnels

Modifier les accentués dans les noms de fichiers : Différence entre versions

De wikiGite

(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... »)
 
 
(5 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
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.
 
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.
+
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é le nom de ces 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é.
+
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 bons accents.
  
 
<SyntaxHighLight lang=bash>
 
<SyntaxHighLight lang=bash>
Ligne 14 : Ligne 14 :
 
IFS='
 
IFS='
 
'
 
'
# first pass for rename directories...
+
# first pass for renaming directories...
 
for file in `find /home -type d | grep-invalid-utf8`
 
for file in `find /home -type d | grep-invalid-utf8`
 
do
 
do
Ligne 20 : Ligne 20 :
 
   dirname=`dirname "$file"`
 
   dirname=`dirname "$file"`
 
   newname=`echo $filename | iconv -f latin1 -t utf8`
 
   newname=`echo $filename | iconv -f latin1 -t utf8`
   echo mv "$file" "$dirname/_${newname}"
+
   # mv "$file" "$dirname/${newname}" # Rename and overwrite existing file with same name and correct accents
   mv "$file" "$dirname/_${newname}"
+
   mv "$file" "$dirname/_${newname}" # Rename but be sure to never overwrite an existing file by adding a leading "_"
 
done
 
done
  
# ... then files in all directories renamed or not
+
# ... then files in all directories renamed (or not)
 
for file in `find /home | grep-invalid-utf8`
 
for file in `find /home | grep-invalid-utf8`
 
do
 
do
Ligne 30 : Ligne 30 :
 
   dirname=`dirname "$file"`
 
   dirname=`dirname "$file"`
 
   newname=`echo $filename | iconv -f latin1 -t utf8`
 
   newname=`echo $filename | iconv -f latin1 -t utf8`
   echo mv "$file" "$dirname/_${newname}"
+
   # mv "$file" "$dirname/${newname}" # Rename and overwrite existing file with same name and correct accents
   mv "$file" "$dirname/_${newname}"
+
   mv "$file" "$dirname/_${newname}" # Rename but be sure to never overwrite an existing file by adding a leading "_"
 
done
 
done
 
</SyntaxHighLight>
 
</SyntaxHighLight>
 +
 +
<small>Crédit : Gilles sur ce post : https://unix.stackexchange.com/questions/6460/bulk-rename-or-correctly-display-files-with-special-characters</small>

Version actuelle datée du 17 janvier 2018 à 12:17

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é le nom de ces 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 bons accents.

#!/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 renaming 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`
   # mv "$file" "$dirname/${newname}" # Rename and overwrite existing file with same name and correct accents
   mv "$file" "$dirname/_${newname}" # Rename but be sure to never overwrite an existing file by adding a leading "_"
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`
   # mv "$file" "$dirname/${newname}" # Rename and overwrite existing file with same name and correct accents
   mv "$file" "$dirname/_${newname}" # Rename but be sure to never overwrite an existing file by adding a leading "_"
done

Crédit : Gilles sur ce post : https://unix.stackexchange.com/questions/6460/bulk-rename-or-correctly-display-files-with-special-characters