Re: [TECH] Problème bash
Bonjour, rm mon\ fichier.xml devrait faire l'affaire. pour l'effacement en lot il te suffit de garder \ dans ton expression régulière. Cordialement, Pascal Le vendredi 18 septembre 2009 à 13:28 +0200, Guy Passail a écrit : Salut à tous, Je me suis bêtement fait refiler des fichiers comportant des noms comportant des espaces du style mon fichier.xml Question : comment faire pour les effacer avec rm isolément et en lots ? Merci de votre aide Guy Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP *** Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Le samedi 19 septembre 2009 à 12:36 +0200, Guy Passail a écrit : Yann a écrit : Guy Passail a écrit : Suffit de demander : find . -name * * |while read i; do mv $i `echo $i | tr _` ; done Non testé, mais devrait marcher. Limitation : Ça ne marchera que si les répertoires n'ont pas d'espace dans leur nom. Pas drôle sans les répertoires (:-)) Fonctionne avec l'arbo suivante : (avant) : $ tree
Re: [TECH] Problème bash
Vincent BRACH a écrit : Le samedi 19 septembre 2009 à 12:36 +0200, Guy Passail a écrit : Yann a écrit : Guy Passail a écrit : Suffit de demander : find . -name * * |while read i; do mv $i `echo $i | tr _` ; done Non testé, mais devrait marcher. Limitation : Ça ne marchera que si les répertoires n'ont pas d'espace dans leur nom. Pas drôle sans les répertoires (:-)) Fonctionne avec l'arbo suivante : (avant) : $ tree . |-- bubu bibi bobo.txt |-- dir with space | |-- dir with space 2 | | `-- tu tu tu.txt | `-- plop truc.txt `-- titi toto tata.txt 2 directories, 4 files $ find . -depth -regex .*\ .* | while read line ; do mv $line `dirname $line`/`basename $line | tr ' ' '_'` ; done (aprés) $ tree . |-- bubu_bibi_bobo.txt |-- dir_with_space | |-- dir_with_space_2 | | `-- tu_tu_tu.txt | `-- plop_truc.txt `-- titi_toto_tata.txt 2 directories, 4 files La petite suptilité réside dans le fait qu'il faut commencer par traiter le contenu d'un directory avant celui-ci (option -depth de find) et conserver dans le nom de fichier de destination du mv le dirname originale (et ne modifier que le basename) sinon on va avoir un petit souci car on va tenter de déplacer dir with space/dir with space 2/tu tu tu.txt - dir_with_space/dir_with space_2/tu_tu_tu.txt , hors dir_with_space/dir_with space_2 n'existe pas encore (et si on fait l'inverse on aura le problème que le répertoire original n'existe plus donc les 'mv' suivant ne fonctionneront pas...) Ceci dit y'a ptet' moyen de faire plus simple (ou tout simplement d'utiliser le script perl rename qui fait ça trés bien ;)) C'est plus drôle là ;-) ? @+ Vincent BRACH Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP *** Bravo, tu es donc le grand vainqueur du concours de la commande bash du WE ! Sur la toile (site que je ne fréquente pas habituellement!), j'avais trouvé un long script dont je ne sais ce qu'il apporterait de plus... http://www.novell.com/coolsolutions/tools/15601.html Merci à tous Guy Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Histoire de (pour les sceptiques ou simplement ceux qui n'ont pas envie d'essayer), je rajoute un 'ti log $ ls *\ * bubu bibi bobo.txt titi toto tata.txt $ for i in *\ * ; do mv $i `echo $i | tr _` ; done $ ls *.txt bubu_bibi_bobo.txt titi_toto_tata.txt A+ Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Vincent BRACH a écrit : $ for i in *\ * ; do mv $i `echo $i | tr _` ; done TB, mais la même chose en récursif pour ce long WE pluvieux ? ;) Guy Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
2009/9/19 Vincent BRACH v.br...@smie.com Pour ceux qui veulent absolument utiliser mv : for i in *\ * ; do mv $i `echo $i | tr _` ; done mais vu la puissance du bash il doit y avoir encore d'autres possibilitées ;) J'ai gagné quoi, un mars ? :p Tu as gagné toute notre considération ! La même chose avec awk maintenant ? ;-) Fabien -- Samuel Goldwynhttp://www.brainyquote.com/quotes/authors/s/samuel_goldwyn.html - I'm willing to admit that I may not always be right, but I am never wrong. Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Guy Passail a écrit : Vincent BRACH a écrit : $ for i in *\ * ; do mv $i `echo $i | tr _` ; done TB, mais la même chose en récursif pour ce long WE pluvieux ? ;) Suffit de demander : find . -name * * |while read i; do mv $i `echo $i | tr _` ; done Non testé, mais devrait marcher. Limitation : Ça ne marchera que si les répertoires n'ont pas d'espace dans leur nom. Yann -- Plantes grasses et cactus : http://www.cactuspro.com/ Yann : http://yanncochard.com Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Yann a écrit : Guy Passail a écrit : Vincent BRACH a écrit : $ for i in *\ * ; do mv $i `echo $i | tr _` ; done TB, mais la même chose en récursif pour ce long WE pluvieux ? ;) Suffit de demander : find . -name * * |while read i; do mv $i `echo $i | tr _` ; done Non testé, mais devrait marcher. Limitation : Ça ne marchera que si les répertoires n'ont pas d'espace dans leur nom. Pas drôle sans les répertoires (:-)) Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
2009/9/18 Guy Passail pass...@free.fr: Salut à tous, Je me suis bêtement fait refiler des fichiers comportant des noms comportant des espaces du style mon fichier.xml Question : comment faire pour les effacer avec rm isolément et en lots ? Merci de votre aide Guy Déjà il faut trouver les fichiers = find genre un truc qui ressemble a: find /mon/path/de/depart/ -regex '.* .*\.xml' /tmp/xml_comportant_un_espace Tu vérifies qu'il n'y a pas de boulettes dans la liste, puis un bon cat /tmp/xml_comportant_un_espace | xargs rm fera exécuter le rm sur ta liste de fichiers. Sinon find /mon/path/de/depart/ -regex '.* .*\.xml' | xargs rm va plus vite mais te goures pas sur la condition du find ++ N1c0 Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Bonjour, Salut, Guy Passail a écrit : Salut à tous, Je me suis bêtement fait refiler des fichiers comportant des noms comportant des espaces du style mon fichier.xml Copier coller, sinon rm mon\ fichier.xml Sinon aussi avec les comme tu as mis dans le mail. Question : comment faire pour les effacer avec rm isolément et en lots ? en lots ? ben tu peut faire un scripts en utilisant \ a la place des ca devrais marcher. Merci de votre aide Guy Espérant que ca aide. Patrick. Sinon tu peux dans le répertoire qui contient des fichiers (et sous répertoires éventuels) avec des espaces taper la commande suivante : rename -v 'y/\ /_/' * Ca renommera tout les fichiers en remplaçant l'espace par un _ (underscore) ... (pratique). A+ Vincent Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Le vendredi 18 septembre 2009 à 14:07 +0200, BRACH Vincent a écrit : Sinon tu peux dans le répertoire qui contient des fichiers (et sous répertoires éventuels) avec des espaces taper la commande suivante : rename -v 'y/\ /_/' * Ca renommera tout les fichiers en remplaçant l'espace par un _ (underscore) ... (pratique). A+ Vincent Oops pardon l'idée était de les effacer (et non de les conserver avec un nom sans espace)... dsl ;) Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
nicolas.flin...@gmail.com a écrit : Sinon find /mon/path/de/depart/ -regex '.* .*\.xml' | xargs rm va Merci Nico, ça marche chez moi avec petite modif comme suit : find ./ -regex '*.*\.xml' ~/tmp/xml_comportant_un_espace | cat ~/tmp/xml_comportant_un_espace Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Merci à tous pour vos bonnes idées. ...quand je pense que j'avais oublié la solution avec le \ ! Guy Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Bonjour Vincent, Bonjour Jean-Claude, Comme je trouvais ton info très intéressante, j'ai voulu l'essayer, et elle ne semble pas fonctionner sur mon système. Lorsque je lance cette commande, aucun message d'erreur ne s'affiche, mais les fichiers ne sont pas renommés. De plus, la page man de rename ne parle pas de l'option -v. rename (/usr/bin/rename) chez moi est un lien symbolique (par le biais des alternatives) vers /usr/bin/prename qui est un script inclus dans le package 'perl'. rename -V indique que j'utilise la version util-linux-ng 2.14.2 Une idée ? Voila donc la différence : le package util-linux-ng n'est pas installé chez moi donc on utilise pas le même outil rename... Chez moi la manpage de rename me donne bien une manpage sur un script perl, et /usr/bin/rename est bien un script perl... Je pense qu'en installant le package perl (et en configurant les alternatives) tu devrais avoir le même comportement que moi ;) nota : attention pour ce script perl il s'agit de l'option -v (v en minuscule ;-) ) Jean-Claude @+ Vincent Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
2009/9/18 Guy Passail pass...@free.fr: find ./ -regex '*.*\.xml' ~/tmp/xml_comportant_un_espace | cat ~/tmp/xml_comportant_un_espace Oui mais fais gaffe, c'est plus la même chose: '*.*\.xml' = n'importe quel fichier .xml, alors que ma regex '.* .*\.xml' concerne tous les .xml qui ont un espace dans le nom (ou que soit l'espace). ++ N1c0 Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
nicolas.flin...@gmail.com a écrit : Oui mais fais gaffe, c'est plus la même chose: '*.*\.xml' = n'importe quel fichier .xml, alors que ma regex '.* .*\.xml' concerne tous les .xml qui ont un espace dans le nom (ou que soit l'espace). mais avec : regex '.* .*\.xml' il ne me les trouve pas !??? Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
2009/9/18 Guy Passail pass...@free.fr: mais avec : regex '.* .*\.xml' il ne me les trouve pas !??? Je dois merdouiller quequechose dans ma regexp (suivant les interpréteurs les syntaxes ne sont pas forcement les mêmes) si on ajoute a ca le fait que je la fasse de tête sans tester... mais l'idée est la suivante: un caractère quelconque = . le caractère a = a le caractère a 3 fois = a{3} le caractère a N fois (zéro compris) = a* n'importe quels caractères N fois (zéro compris) = .* le caractère espace = ' ' le caractère espace n'importe ou dans une string = .* .* le caractère . = \. la fin de la string = $ un espace (au moins un) dans le nom qui se termine par .xml = .* .*\.xml$ Fais mu-muse avec jusqu'à trouver ce qui te rend bien tes fichiers... en tout cas c'est sur que si tu mets .* ou .*\.xml tu renvoies tous les XML. Mais pas ton critère de présence d'un caractère espace. ++ N1c0 Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
BRACH Vincent a écrit : rename (/usr/bin/rename) chez moi est un lien symbolique (par le biais des alternatives) vers /usr/bin/prename qui est un script inclus dans le package 'perl'. Perl est installé sur mon système, mais il n'y a pas d'outil prename. Chez moi la manpage de rename me donne bien une manpage sur un script perl, et /usr/bin/rename est bien un script perl... J'ai bien trouvé la page man de prename : http://pwet.fr/man/linux/commandes/prename La mienne est celle-ci: http://linux.die.net/man/1/rename J'ai même trouvé un forum qui donne le même exemple que toi : http://forum.trustonme.net/open/post-cat-1-topic-8166.html Je vais essayer de trouver et d'installer prename. Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Le vendredi 18 septembre 2009, Jean-Claude REPETTO a écrit : BRACH Vincent a écrit : rename (/usr/bin/rename) chez moi est un lien symbolique (par le biais des alternatives) vers /usr/bin/prename qui est un script inclus dans le package 'perl'. Perl est installé sur mon système, mais il n'y a pas d'outil prename. Chez moi la manpage de rename me donne bien une manpage sur un script perl, et /usr/bin/rename est bien un script perl... J'ai bien trouvé la page man de prename : http://pwet.fr/man/linux/commandes/prename La mienne est celle-ci: http://linux.die.net/man/1/rename J'ai même trouvé un forum qui donne le même exemple que toi : http://forum.trustonme.net/open/post-cat-1-topic-8166.html Je vais essayer de trouver et d'installer prename. Pourquoi ne pas utiliser mv qui fait la même chose ? Ou j'ais tout faux ? JPB Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
JPB a écrit : Pourquoi ne pas utiliser mv qui fait la même chose ? Ou j'ais tout faux ? La page de man de mv : http://unixhelp.ed.ac.uk/CGI/man-cgi?mv n'indique pas qu'on peut faire des substitutions avec des expressions rationnelles. Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***
Re: [TECH] Problème bash
Le vendredi 18 septembre 2009, Jean-Claude REPETTO a écrit : JPB a écrit : Pourquoi ne pas utiliser mv qui fait la même chose ? Ou j'ais tout faux ? La page de man de mv : http://unixhelp.ed.ac.uk/CGI/man-cgi?mv n'indique pas qu'on peut faire des substitutions avec des expressions rationnelles. C'est implicite, car mv fait partie du shell et profite donc de toutes les facilités de celui-ci (me semble t'il). JPB Diffusez cette liste aupres de vos relations :-) Linux Azur : http://linux-azur.org Vous etes responsable de vos propos. *** Pas de message SMS, HTML ni de PJ SVP ***