OVH Cloud OVH Cloud

accents

6 réponses
Avatar
Pascal Legrand
Bonjour,
j'ai installé un nouveau serveur Linux avec la mandrake 10, suite à cette installation, j'ai
transféré les données qui se trouvaient sur un autre serveur (Mandrake 7.0) vers ce nouveau serveur.
Lors de ce transfert, tous les fichiers dont le nom comportait un caractère accentué ont vu leur nom
modifié et les caractères accentués remplacés par des "?".
De plus lorsque je modifie le nom de ces fichiers, sous windows (via samba) j'ai bien mon caractère
accentué mais sous linux les caractères accentués sont remplacés par des codes.
Par rapport à ça j'ai 2 questions :
La première : comment faire pour que cela ne se reproduise plus.
La seconde : quelqu'un a t'il une idée de script pour remplacer dans une arborescence tous les
points d'interrogation par les bons caractères (voir un e tout bête pour l'instant) dans les noms de
fichier ??

merci
--
Pascal Legrand
*IUT de Chartres* - _Service Informatique_
1 place Pierre Mendès France - 28000 Chartres
Tel: 02 37 91 83 36 - Fax: 02 37 91 83 01
Pascal.Legrand@univ-orleans.fr

6 réponses

Avatar
chmod 777
Pascal Legrand wrote:

Bonjour,
Bonjour,


La seconde : quelqu'un a t'il
une idée de script pour remplacer dans une arborescence tous les points
d'interrogation par les bons caractères (voir un e tout bête pour
l'instant) dans les noms de fichier ??


J'ai fait ce petit truc: tu lui donnes le nom de dossier à traiter en
argument et il remplace tous les caractères accentués dans les noms de
fichiers... Il peut être amélioré pour virer les espaces et autres
caractères "loufoques". Il est loin d'être académique, mais pourtant, il
tourne ;o)

#!/bin/sh
compteur=0
if [ -d $1 ] ; then
cd $1
for i in * ; do
if [ -f "$i" ] ; then
if mv "$i" `echo "$i" | sed y/àäâçéèëêïîöôù/aaaceeeeiioou/` 2> /dev/null ;
then Ce "then" était sur la ligne précédente
: $((compteur+=1))
fi
fi
done
else
echo "$1 n'est pas un repertoire" >&2
exit 1
fi
echo "$compteur fichier(s) modifié(s)"


merci


En espérant t'avoir un peu aidé,

Lionel

--
Mon adresse EST valide: ne rien supprimer!
J'espère être tranquille grâce à la méthode Paugam

Avatar
Nicolas George
Rakotomandimby Mihamina wrote in message
<ccgjja$afp$:
A mon avis Pascal devrait trouver une solution pour Afficher
correctement les accents, et non pour renommer les fichiers de telle sorte.


Tu as en partie raison. En l'occurence, je soupçonne que les noms de
fichiers sont encodés en ISO-8859-1, alors que la nouvelle version de la
distribution considère tout par défaut en UTF-8. Or ça, c'est une très
bonne chose.

La compatibilité avec l'ancien, c'est bien gentil, mais de temps en
temps il faut savoir l'abandonner pour avancer. Et quant aux backups, de
toutes façons, de temps en temps il faut faire des backups complets,
quand même.

Si c'est bien un problème d'encodage, ISO-8859-1 devenu UTF-8, il est
relativement facile de convertir les noms de fichiers.

Avatar
Rakotomandimby Mihamina
Bonjour,
... Et supposons maintenant que ce sont des données a sauvegarder
regulierement et si la sauvegarde est incrementale, comme on a renommé
tous les fichiers on va tout backuper ce qu'on a renommé (vive la taille
du backup)...

A mon avis Pascal devrait trouver une solution pour Afficher
correctement les accents, et non pour renommer les fichiers de telle sorte.

cela dit, si chmod777 confirme que son script marche tres bien je
voudrai avoir plus de precisions sur son fonctionnement parceque le
renommage en masse est un sujet qui est interessant ... (en PV si possible)
--
Rakotomandimby Mihamina Andrianifaharana
Tel : +33 2 38 76 43 65
http://www.rktmb.org/Members/mihamina
Avatar
Pascal Legrand
-------- Message original --------

Rakotomandimby Mihamina wrote in message
<ccgjja$afp$:
A mon avis Pascal devrait trouver une solution pour Afficher
correctement les accents, et non pour renommer les fichiers de telle sorte.


Tu as en partie raison. En l'occurence, je soupçonne que les noms de
fichiers sont encodés en ISO-8859-1, alors que la nouvelle version de la
distribution considère tout par défaut en UTF-8. Or ça, c'est une très
bonne chose.

La compatibilité avec l'ancien, c'est bien gentil, mais de temps en
temps il faut savoir l'abandonner pour avancer. Et quant aux backups, de
toutes façons, de temps en temps il faut faire des backups complets,
quand même.

Si c'est bien un problème d'encodage, ISO-8859-1 devenu UTF-8, il est
relativement facile de convertir les noms de fichiers.
Merci pour votre réponse.

Mais en fait je ne sais pas comment faire pour vérifier le type d'encodage, et ensuite comment
convertir les noms de fichiers merci encore

--
Pascal Legrand
*IUT de Chartres* - _Service Informatique_
1 place Pierre Mendès France - 28000 Chartres
Tel: 02 37 91 83 36 - Fax: 02 37 91 83 01



Avatar
Nicolas George
Pascal Legrand wrote in message
<40ebe6fb$0$18099$:
Mais en fait je ne sais pas comment faire pour vérifier le type
d'encodage,


Une solution, en ligne de commande, est de taper :

ls -N | xxd

On obtient un résultat du style :

0000000: 636f 756c e90a 706f 7274 655f 6176 696f coul..porte_avio
0000010: 6e73 0a74 6f75 6368 e90a ns.touch..

Il faut regarder à droite, les endroits où il devrait y avoir des
accents, et regarder ce qui correspond à gauche :

0000000: 636f 756c e90a 706f 7274 655f 6176 696f coul..porte_avio
^^ ^
0000010: 6e73 0a74 6f75 6368 e90a ns.touch..
^^ ^

Si é est codé par e9, à par e0, etc. (cf. la page de man iso-8859-1 pour
la liste complète), c'est bien de l'ISO-8859-1. En revanche, si é est
codé par deux octets, c3 a9, alors c'est déjà de l'UTF-8. Et si c'est
autre chose, il faut voir.

et ensuite comment convertir les noms de fichiers merci
encore


Ce n'est pas évident. Le plus fiable serait probablement de faire faire
ça par un script perl, quelque chose comme :

#!/usr/bin/env perl

use strict;
use warnings;

for my $f (@ARGV) {
if($f =~ /[^x20-x7exa0-xff]/) {
warn "$f: invalid iso-8859-1n";
next;
}
my $n = pack("C*", unpack("C*", pack("U*", unpack("C*", $f))));
if($n ne $f) {
rename $f, $n or warn "$f: $!n";
}
}

C'est un peu beurk, en particulier les quatre pack emboîtés, mais le
comportement des chaînes en Unicode dans les appels système est assez
mal documenté... En tout cas ça a l'air de marcher.

Avatar
X.B
essaye de trouver un programme qui s'appelle convmv (il existe un rpm suse)
http://j3e.de/linux/convmv/

convmv is meant to help convert a directory tree and the contained
files or a whole filesystem into a different encoding. It just converts
the filenames, not the content of the files. A special feature of
convmv is that it also takes care of symlinks, also converts the
symlink target pointer in case the symlink target is being converted,
too.

All this comes in very handy when one wants to switch over from old
8bit locales to UTF-8 locales. It is also possible to convert
directories to UTF-8 which are already partly UTF-8 encoded. convmv is
able to detect if certain files are UTF-8 encoded and will skip them by
default. To turn this smartness off use the --nosmart switch.

An interoperability issue that comes with UTF-8 locales is this: Linux
and (most?) other Unix-like operating systems use the so called
normalization form C (NFC) for its UTF-8 encoding by default but do not
enforce this. Darwin, the base of the Macintosh OS enforces
normalization form D (NFD), where a few characters are encoded in a
different way. convmv is able to convert files to NFC or NFD which
makes interoperability to such systems a lot easier.