OVH Cloud OVH Cloud

Script : Conversion de charset

5 réponses
Avatar
Nicolas Ecarnot
Bonsoir,

Je suis un peu dans la panade, car je me retrouve avec le bon vieux
problèmes Samba des noms de fichiers crées par windows et stockés sous unix
(crées par windows en cp1204 ou que sais-je, et stockés par unix en
ISO8859-1)

Bref, je cherche un script qui pourrait me convertir ces noms de fichiers à
la volée (lire : récursivement).
J'ai bien trouvé convmv, mais sur mon freebsd5.1R, je n'ai qu'un perl 5.6,
trop vieux pour ce script.
J'aurais bien aussi mon cerveau, mais je viens de passer trois heures sur
des scripts sh avec des find, des sed, des exec dans tous les sens, et ça
ne veut pas sortir.

Donc, si vous avez une piste, ça me sauverait la vie.

Merci beaucoup.

--
Nicolas Ecarnot

5 réponses

Avatar
no
On Fri, 02 Jan 2004 20:08:32 +0000, Nicolas Ecarnot wrote:

Bonsoir,

Je suis un peu dans la panade, car je me retrouve avec le bon vieux
problèmes Samba des noms de fichiers crées par windows et stockés sous unix
(crées par windows en cp1204 ou que sais-je, et stockés par unix en
ISO8859-1)

Bref, je cherche un script qui pourrait me convertir ces noms de fichiers à
la volée (lire : récursivement).
J'ai bien trouvé convmv, mais sur mon freebsd5.1R, je n'ai qu'un perl 5.6,
trop vieux pour ce script.
J'aurais bien aussi mon cerveau, mais je viens de passer trois heures sur
des scripts sh avec des find, des sed, des exec dans tous les sens, et ça
ne veut pas sortir.

Donc, si vous avez une piste, ça me sauverait la vie.



Tu bloques au niveau de la conversion de « charset » ? Est ce que
`iconv' existe sur FreeBSD ?

ISO_FNAME=$(echo $WINDOWS_FNAME | iconv --from-code WINDOWS-1250 --to-code ISO-8859-1)
if [ $? -ne 0 ]; then
echo "Conversion impossible ?";
fi;

(Sinon, 3 heures ça doit être suffisant pour installer un Perl-5.8 /o)

Avatar
Nicolas Ecarnot
no wrote in news::

Tu bloques au niveau de la conversion de « charset » ? Est ce que
`iconv' existe sur FreeBSD ?


Oui :o)

ISO_FNAME=$(echo $WINDOWS_FNAME | iconv --from-code WINDOWS-1250
--to-code ISO-8859-1) if [ $? -ne 0 ]; then
echo "Conversion impossible ?";
fi;


Ok, merci. C'est un peu ce genre de script que je suis en train de
bricoler.
Mais le problème est un poil plus compliqué : En effet, il faut fabriquer
un script qui descend dans les répertoires.
Or, il ne peut pas descendre avant d'avoir converti le nom du répertoire
dans lequel il doit descendre.
Et pour couronner le tout, il faut surtout éviter de convertir deux fois
les fichiers accentués mais correctement encodés (ISO-8859-1)

(Sinon, 3 heures ça doit être suffisant pour installer un Perl-5.8
/o)


:o/

--
Nicolas Ecarnot

Avatar
DINH Viêt Hoà

Mais le problème est un poil plus compliqué : En effet, il faut fabriquer
un script qui descend dans les répertoires.
Or, il ne peut pas descendre avant d'avoir converti le nom du répertoire
dans lequel il doit descendre.


et "find" ?

--
DINH V. Hoa,

etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan

Avatar
Etienne PIERRE
Nicolas Ecarnot wrote:
ISO_FNAME=$(echo $WINDOWS_FNAME | iconv --from-code WINDOWS-1250
--to-code ISO-8859-1) if [ $? -ne 0 ]; then
echo "Conversion impossible ?";
fi;



Ok, merci. C'est un peu ce genre de script que je suis en train de
bricoler.
Mais le problème est un poil plus compliqué : En effet, il faut fabriquer
un script qui descend dans les répertoires.
Or, il ne peut pas descendre avant d'avoir converti le nom du répertoire
dans lequel il doit descendre.
Et pour couronner le tout, il faut surtout éviter de convertir deux fois
les fichiers accentués mais correctement encodés (ISO-8859-1)



Avec les options -maxdepth et -mindepth de find, genre :

found=yes
depth=1
while [ $found = "yes" ]
do
found=no
find /quelque/part -mindepth $depth -maxdepth $depth
| while read file
do
found=yes
newfile=$(echo "$file" |
iconv --from-code WINDOWS-1250
--to-code ISO-8859-1)

if [ $? -eq 0 ]; then
mv "$file" "$newfile"
else
echo "Conversion de $file impossible"
fi
done
let depth=$depth+1
done



C'est un petit script que je n'ai pas du tout testé, mais je suppose que
ça doit marcher. A tester avant d'utiliser.



Etienne


Avatar
Nicolas Ecarnot
Bon ben désolé et merci à ceux qui ont répondu.
J'ai fini par me faire une série de petits scripts semi-automatique, en
partie par shell, en partie par des scripts vi (c'est quand même
idéniablement le meilleur éditeur de texte qui ait été écrit, nul n'oserait
en douter.)

Donc merci beaucoup pour ce soutien psychologique, mes 40100 fichiers sont
a présent converti et la joie règne dans mes pantoufles.

Bonne année, et bon courage aux sysadmin :o)

--
Nicolas Ecarnot