#1 Le 02/06/2017, à 13:30
- jeteztout
Correction encodage par script
Bonjour,
j'ai trouvé ce script pour corriger l'encodage de mes noms de fichier. Mais il est interactif et me demande pour chaque fichier. J'en ai des milliers, donc je voudrais que tout soit automatique et qu'il ne me demande pas de choisir l'encodage et réencode tout directement en windows-1252 :
#!/bin/bash
# list of encodings to try. (max 10)
enc=( windows-1252 )
while IFS= read -rd '' file <&3; do
base=${file##*/} dir=${file%/*}
# if converting from utf8 to utf8 succeeds, we'll assume the filename is ok.
iconv -f utf8 <<< "$base" >/dev/null 2>&1 && continue
# display the filename converted from each enc to utf8
printf 'In %s:\n' "$dir/"
for i in "${!enc[@]}"; do
name=$(iconv -f "${enc[i]}" <<< "$base")
printf '%2d - %-12s: %s\n' "$i" "${enc[i]}" "$name"
done
printf ' s - Skip\n'
while true; do
read -p "? " -n1 ans
printf '\n'
if [[ $ans = [0-9] && ${enc[ans]} ]]; then
name=$(iconv -f "${enc[ans]}" <<< "$base")
mv -iv "$file" "$dir/$name"
break
elif [[ $ans = [Ss] ]]; then
break
fi
done
done 3< <(LC_ALL=C find . -depth -name "*[![:print:][:space:]]*" -print0)
Quelqu'un peut-il m'aider ? Merci !
Hors ligne
#2 Le 02/06/2017, à 18:49
- LeoMajor
Re : Correction encodage par script
bonjour,
il y a detox, qui nettoie les noms de fichiers, et en plus récursivement
touch "[(1996-été?)Père Noël \$200:@ù].mp3"
ls .
[(1996-été?)Père Noël $200:@ù].mp3
detox -s lower8 "[(1996-été?)Père Noël \$200:@ù].mp3"
ls .
1996-ete-pere_noel_200_u-.mp3
j'ai juste ajouté
/etc/detoxrc
...
#add_lower8
sequence "lower8" {
utf_8;
safe;
lower;
wipeup;
};
...
Hors ligne
#3 Le 02/06/2017, à 19:01
- jeteztout
Re : Correction encodage par script
Bonjour,
il semble nettoyer en "supprimant" les accents, en remplaçant les espaces par des _, etc. Je me demande si c'est vraiment une bonne solution. Les utilisateurs vont continuer à ajouter des accents dans les noms de fichier ou a à renommer les anciens, donc que se passera-t'il si le charset du nom de fichier n'a pas été changé ?
Hors ligne