Re: Expressions regulières //netoyage de fichiers SAMBA
Cédric LE BRIS a écrit :
> Bonjour, je cherche des connaisseurs shell:)
> En fait je cherche à faire une petite boucle qui passerais en récursif l'ensemble des fichiers
> Pour les nettoyer de leur accents et de leus espaces....
> Voilà ce que j'ai sous la main pour le moment:
>
> Le problème c'est qu' j'aimerais passer un test à chaque fichier pour voir si chaqe condition est respectée...
rename -n ...
> rename 's/[éèêë]/e/g' "$1"
> rename 's/[ÈÉÊË]/E/g' "$1"
> rename 's/[àáâãäå]/a/g' "$1"
> rename 's/[ÀÁÂÃÄÅ]/A/g' "$1"
> rename 's/[ïîìí]/a/g' "$1"
> rename 's/[ÌÍÏÎ]/I/g' "$1"
> rename 's/[òóôõö]/o/g' "$1"
> rename 's/[ÒÓÔÕÖ]/O/g' "$1"
> rename 's/[ùúûü]/u/g' "$1"
> rename 's/[ÙÚÛÜ]/U/g' "$1"
> rename 's/[$!?µ£ %]/_/g' "$1"
Pour cette dernière, je listerait plutôt tous les caractères acceptés et remplacerait le reste par _, du genre
rename 's/[^a-zA-Z0-9\-_ ]/_/g' "$1"
puis virer éventuellement les _ doublés
rename 's/__/_/g' "$1"
Mais tu vas avoir un pb, car seul la 1re modif va marcher, pour les suivantes, $1 aura changé...
Je te conseillerais plutôt d'utiliser sed pour tout faire en 1 fois, genre
new=$(echo $1 | sed -e 's/[éèêë]/e/g; s/[ÈÉÊË]/E/g; ... ; s/[^a-zA-Z0-9\-_ ]/_/g; s/__/_/g')
ou mieux avec
new=$(echo "$1"|sed -e 'y/áàâäçéèêëíìîïñóòôöúùûü ÁÀÂÄÇÉÈÊËÍÌÎÏÑÓÒÔÖÚÙÛÜ/aaaaceeeeiiiinoooouuuu_aaaaceeeeiiiinoooouuuu/; s/[^a-zA-Z0-9\-_ ]/_/g; s/__/_/g')
# Attention, la ligne ci-dessus vire les majuscules et les espaces, je te laisse corriger
if ( "$new" != "$1")
then
echo "Renommer '$1' en '$new' ?"
read rep
[ $rep == 'o' ] && mv "$1" "$new" && echo "renommage OK"
fi
tr 'y/chars/chars/' marche aussi si tu n'es pas en utf8.
Daniel
Reply to: