0

Comment convertir toute une arborescence dans un autre encodage

Suite à une migration de serveurs de fichiers, je fus confronté à un problème d’encodage sur le nouveau serveur de fichier.
Si vous rencontrer ce même problème lors de vos copies de serveur à serveur voici ce qu’il faut faire:

Identification de l’encodage « chartset » du fichier

exemple de commande pour connaitre le chartset:

file -i report.txt 
report.txt: text/plain; charset=iso-8859-1
Préparation

Dans mon cas, j’avais un vieux serveur sous Mandriva avec comme encodage des fihiers en ISO-8859-1 et mon nouveau serveur sous Ubuntu avec un encodage UTF-8.
Voici la démarche à suivre:

toutes les commandes se feront sur le nouveau serveur

2 possibilités pour la copie: en découpe les paquets avec compression ou un bon vieux scp

ssh login@IP_old_serv "(cd /repertoir_fichier/;tar cfz - .|dd obs=1000b)"|dd ibs=1000b|tar xvpfz -

ou

scp -pr login@IP_old_serv:/repertoir_fichier/ /new_repertoir_fichier/

une fois la copie fini, on passe à l’encodage

sauvegarde ACL

dans mon cas, c’est un serveur de fichiers qui se trouve dans un domaine Windows avec des droits spécifiques sur les répertoires, je vais donc sauvegarder les ACL

ici on se place sur le vieux serveur

getfacl -R -P /repertoir_fichier/ | gzip -f --best /repertoir_autre/acl-repertoire.gz
Convertir arborescence complète

une fois nos données copiées et sauvegarde des ACL, nous allons passer à l’encodage

convmv --notest -r -f iso-8859-1 -t utf8 /new_repertoir_fichier/

-r: on renome toute l’arborescence de /new_repertoir_fichier/ récursivement. Par défaut, convmv ne convertit pas les fichiers et répertoires qui sont déjà en UTF-8
–notest: renomme effectivement les fichiers sinon convmv se content juste d’afficher ce qu’il faut convertir
-f: encodage de départ
-t: encodage cible

D’autres options peuvent être rajoutés, je vous invite donc à faire un man

man convmv
Restauration ACL

Une fois notre arborescence codée avec le bon charset, il faut restaurer les ACL.
Attention, ne pas restaurer les ACL de manière brut, car il faut aussi coder la sauvegarde des ACL avec le bon charset:

On commence par décompresser et convertir dans la foulé:

gzip -d acl-repertoire.gz && iconv -f ISO-8859-1 -t UTF-8 acl-repertoire -o acl-repertoire.txt

Puis on restaure:

setfacl --restore=/new_repertoir_fichier/acl-repertoire.txt

Partager l'article :





fred

"Dire que l'on s'en fiche du droit à la vie privée sous prétexte qu'on a rien à cacher, c'est comme déclarer que l'on se fiche du droit à la liberté d'expression sous prétexte qu'on a rien à dire." Edward Snowden

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *