[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [linux] supprimer les accents dans les noms de fichiers
On Wednesday 07 November 2001 15:33, you wrote:
> --- Alain EMPAIN <Alain.Empain@ulg.ac.be> a écrit : >
> On Tuesday 06 November 2001 22:59, you wrote:
> <couic>
>
> > Un simple script 'antique' ;-) peut faire l'affaire.
>
> Oui, mais je n'ai jamais pratiqué :-)
Cela en vaut VRAIMENT la peine, car en un rien de temps, tu vas te mettre à
écrire au vol de petits scripts qui vont te faire regretter de ne pas t'y
etre mis plus tot.
Je passe à PERL dès que cela devient plus complexe mais dans la vie de tous
les jours j'utilise sans cesse les possibilités _étonnantes_ qu'une
connaissance de base de bash met à ta portée (voir les tutorials sur le web)
> > En fait, je crois qu'il est intéressant de convertir
> > les é en e, malgré le
> > fait qu'il faut établir une liste de correspondance;
>
> Tu parles de quoi là ? Samba peut le faire
> automatiquement ?
Simplement faire la liste des accents que tu rencontres (tous les a, tous les
e... = 'âäãáàéèêë' etc que tu fais correspondre un pour un à une autre liste
' comme cela tu définis exactement ce que tu veux.
> > par précaution, on il
> > faudrait peut-^etre filtrer ce qu'il reste au cas où
> > on aurait oublié un caractère spécial
dans le pipe tu ajoutes un autre filtre 'tr', qui crée le complément (-c) des
alphanumériques et des nombres, et transforme ces caractères spéciaux en X
==> Voir le 'man tr', il y a d'autres options, ":alnum:" remplace
"A-Za-z0-9",
le complément de ":print:" est sans doute ce que tu cherches car :alnum: ne
comprend pas certain caractères valides comme '-', qui seraient transformés
alors en X.
echo $OLD | tr "âäãáàéèêë" "aaaaaeeee" | tr -c "A-Za-z0-9" "X"
> > --------------------------------------------
> > for file in $*
>
> Question : à quoi sert le $* ?
C'est l'ensemble des arguments d'un programme : si je tapes
'truc un deux trois' et que truc contient une seule ligne 'echo $* ', il va
imprimer 'un deux trois' ('un' est $1, 'deux' est $2, l'ensemble est $*)
C'est élémentaire, donc je te conseille vivement de passer 1 heure sur un
tutorial
° http://www.linux-france.org/article/debutant/debutant-linux.html
° http://stommel.tamu.edu/~baum/programming.html => une mine sur tous les
sujets !! (très longue page, utilise 'find -> bash' pour le trouver dans
Shells)
> Mais en utilisant un simple *, il ne descend pas dans
> les sous répertoires. Et j'en ai plusieurs centaines,
> d'où mon intérêt pour une solution automatique.
Va le danger implicite d'une procédure de ce type, et ta faible connaissance
des scripts, prends bien la peine de faire qqs exercices, et d'imprimer ce
que tu vas faire (cf mon 'echo $CMD', pendant le debugging, plutot que
l'exécution réelle de la commande).
Ce serai dommage de te bruler les ailes ;-)
>
> Donc il me faudrait la même fonction, mais qui descend
> dans les sous répertoires.
On peut avec find rechercher uniquement les directories et executer une
commande pour chaque élément trouvé.
find . -type d -exec ls -l {} \;
chaque élément trouvé est noté {}
Attention au \; le \ est indispensable pour que le ; appartienne à l' 'exec'
et pas au 'find'
>
> J'ai essayé for file in `find .`, mais alors les noms
> de fichiers contenant des espaces sont scindés.
Ce serait l'occasion de remplacer les espaces par des '_' ;-)
--
Bon amusement,
Alain
+--------------------------------------------------------------------------------------
| Dr Alain EMPAIN Bioinformatique, Génétique Moléculaire B43,
| Fac. Méd. Vétérinaire, Univ. de Liège, Sart-Tilman / B-4000 Liège
| Alain.EMPAIN@ulg.ac.be
| WORK:+32 4 366 3821 Fax: +32 4 366 4122 GSM:+32 497 701764
| HOME:+32 85 512341 -- Rue des Martyrs,7 B-4550 Nandrin
[ Soyez précis dans vos sujets svp afin de déterminer directement ]
[ le type de demande... ]
[ Pour vous (dés)inscrire, aller sur http://unixtech.be/ml.php ]
[ Archives de la mailing list: http://archives.unixtech.be/linux/ ]
[ http://unixtech.be Contact: listmaster@unixtech.be ]