Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 09-01-2013 02:45:40

vince06fr
Membre
Distrib. : Debian Sid/experimental
Noyau : Linux 3.7-trunk-amd64
(G)UI : gnome-shell (gnome 3.6)
Inscription : 29-10-2012

[Résolu] Probleme avec rename

J'utilise la commande rename avec find pour effectuer des renommage en masse de mes fichiers et repertoires, ainsi pour remplacer les espaces par _ dans l'arborescence de /foo je lance

 find /foo -exec rename "s/\s/_/g" {} \;


qui marche parfaitement

Pour remplacer les é par e

find  /foo -exec rename 's/é/e/' {} \;


qui marche parfaitement aussi

Maintenant la commande suivante devrait supprimer tout les accents et remplacer les espaces par des _ mais ce n'est pas vraiment le résultat que j'obtiens

$ cd /foo
$ touch tést && touch "bo jour"
$ ls
bo jour  tést
$ find   /foo -exec rename 'y/éèêàâôî y/eeeaaoi_/' {} \;
vince@Bob:~/test$ ls
bo_jour  teest
 



Les accents ont bien était supprimer mais les remplacements sont vraiment bizarre

Dernière modification par vince06fr (10-01-2013 22:46:45)

Hors ligne

#2 09-01-2013 10:22:06

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [Résolu] Probleme avec rename

La commande suivante remplace tous les caractères non-ascii (accents, cédilles, etc.) par une version ascii, remplace les espaces par des _ et n'effectue le renommage que si le nouveau nom est différent du nom initial.

find /foo -exec sh -c 'F="{}"; F2="$(echo {} | iconv -t ascii//TRANSLIT | sed "s/\s/_/g" )"; if [ "$F" \!= "$F2" ]; then mv "$F" "$F2"; fi' \;


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#3 09-01-2013 14:07:07

vince06fr
Membre
Distrib. : Debian Sid/experimental
Noyau : Linux 3.7-trunk-amd64
(G)UI : gnome-shell (gnome 3.6)
Inscription : 29-10-2012

Re : [Résolu] Probleme avec rename

Merci captnfab, ta commande m'a été très utile. Je savais qu'il était possible de le faire avec sed mais je ne connaissais pas iconv.
Bon par contre ça ne marche pas pour les parentheses, crochet et virgules j'ai bien essayé de rajouter un pipe mais je dois mal m'y prendre (la syntaxe de sed est assez indigeste pour moi hmm :

$ cd
$ mkdir foo
$ cd foo
$ touch bonjou]
$ ls
bonjou]
$ find ~/foo -exec sh -c 'F="{}"; F2="$(echo {} | iconv -t ascii//TRANSLIT | sed "s/\s/_/g" | "s/\]//" )"; if [ "$F" \!= "$F2" ]; then mv "$F" "$F2"; fi' \;
sh: 1: s/\]//: not found
mv: impossible de déplacer «/home/vince/foo» vers «»: Aucun fichier ou dossier de ce type
sh: 1: s/\]//: not found
mv: impossible de déplacer «/home/vince/foo/bonjou]» vers «»: Aucun fichier ou dossier de ce type
 



J'aimerais aussi savoir quelle est la bonne commande avec rename à la place de

$ find   /foo -exec rename 'y/éèêàâôî y/eeeaaoi_/' {} \;



Une derniere chose, je ne comprend pas très bien l'option -c de bash, j'ai bien lu le man mais je suis pas très doué hmm pourrais-tu m'expliquer précidément commen cela agit sur ta commande?

-c chaîne Si l'option -c est présente, les commandes sont  lues  depuis
                 la  chaîne  fournie.  S'il y a des arguments après la chaîne,
                 ils sont affectés aux paramètres positionnels, en  commençant
                 par $0.

Dernière modification par vince06fr (09-01-2013 14:10:00)

Hors ligne

#4 09-01-2013 14:25:54

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [Résolu] Probleme avec rename

Tu peux virer les crochets et parenthèses avec

sed 'y/\[\]()/____/'


Que tu peux rajouter dans la ligne de commande comme suit :

find /foo -exec sh -c 'F="{}"; F2="$(echo {} | iconv -t ascii//TRANSLIT | sed "s/\s/_/g;y/\[\]()/____/" )"; if [ "$F" \!= "$F2" ]; then mv "$F" "$F2"; fi' \;


Mais tu risques d'avoir des "__" après ça. Que tu peux vouloir virer avec un

sed 's/_\+/_/g'


Sans compter les "_" finals que tu ne veux pas nécessairement :

sed 's/_$//'



Ce qui donne au final :

find /foo -exec sh -c 'F="{}"; F2="$(echo {} | iconv -t ascii//TRANSLIT | sed "s/\s/_/g;y/\[\]()/____/;s/_\+/_/g;s/_$//" )"; if [ "$F" \!= "$F2" ]; then mv "$F" "$F2"; fi' \;


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#5 09-01-2013 22:01:20

vince06fr
Membre
Distrib. : Debian Sid/experimental
Noyau : Linux 3.7-trunk-amd64
(G)UI : gnome-shell (gnome 3.6)
Inscription : 29-10-2012

Re : [Résolu] Probleme avec rename

Merci, comme je disais cette syntaxe est vraiment très indigeste pour moi lol
Bon, je ne passe pas encore le post en résolu car  j'aimerais quand même trouver la bonne syntaxe pour rename

Hors ligne

#6 10-01-2013 13:37:41

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [Résolu] Probleme avec rename

Ta syntaxe est bonne, mais il y a un bug dans rename. Une mauvaise gestion de l'unicode probablement.

Tu peux résoudre le problème en utilisant « PERL_UNICODE=A rename » au lieu de « rename »

Exemple : « PERL_UNICODE=A rename 'y/é/e/' héhé »

Autre possibilité, tu peux modifier le fichier /usr/bin/prename et remplacer la première ligne par « #!/usr/bin/perl -w -CA ».

Je pense que ce pb mérite un rapport de bug.

Sources: http://www.perl.com/pub/2012/04/perluni … -utf8.html

PS: Attention à ne pas faire un « export PERL_UNICODE=A » comme indiqué sur la source, car cela pourrait causer des problèmes de fonctionnement avec les autres programmes Perl que tu utilises.

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#7 10-01-2013 22:44:31

vince06fr
Membre
Distrib. : Debian Sid/experimental
Noyau : Linux 3.7-trunk-amd64
(G)UI : gnome-shell (gnome 3.6)
Inscription : 29-10-2012

Re : [Résolu] Probleme avec rename

Merci pour toutes précieuses infos, smile
je passe le post en résolu

Dernière modification par vince06fr (11-01-2013 00:22:20)

Hors ligne

Pied de page des forums