PERL + bash: gestion des espaces vides dans les noms de fichier - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 17-07-2005 à 17:57:38
Je ne sias pas comment il va te l'interpréter mais as-tu essayer de mettre systeme("mv "$old_name" $new_name" ) ?
[EDIT] grilled
Marsh Posté le 17-07-2005 à 18:00:39
je viens de verifier avec un script de ce type :
Code :
|
et j'ai bien un fichier toto_to au final
Marsh Posté le 17-07-2005 à 18:04:30
Merci les gars, j'essayerais tout ça demain et je vous tiens au courant.
Marsh Posté le 17-07-2005 à 18:15:53
jlighty a écrit : je viens de verifier avec un script de ce type :
|
Ouai, le probleme est de savoir si Perl va comprendreet bien interprété les ""
Marsh Posté le 17-07-2005 à 18:17:35
il n'a cas tous faire en sh, avec sed pour remplacer les espaces par les underscores.
Marsh Posté le 17-07-2005 à 18:20:28
C'est ce que j'aurai fait aussi.... puisque je capte rien au perl
D'ailleurs ca m'interesse pas mal de m'y mettre (à perl et/ou python d'ailleurs)
Marsh Posté le 18-07-2005 à 10:51:30
Me revoila.
Je fais cette commande shell:
for fichier in *; do echo $fichier; done
Ca me liste bien mes fichiers avec espace. : toto to.jpg
Je fais cette commande:
for fichier in *; do perl rename.pl $fichier; done
où rename.pl est bêtement la commande: print "$ARGV[0]\n";
Et là il ne m'imprime que le premier "mot" de mon nom de fichier. Il s'arrete dès le premier espace : toto
C'est bizarre ça...
Marsh Posté le 18-07-2005 à 10:53:14
Idée: ARGV[0] est le premier arguments/mot. Faudrait-il que je concatène tous les arguments contenu dans @ARGV ?
Je vais essayer ça.
Marsh Posté le 18-07-2005 à 11:10:02
Enfin !
Ca a pris du temps...
#!/usr/bin/perl
use strict;
use warnings;
my $old_name = join(' ',@ARGV);
my $new_name = join('_',@ARGV);
system ("cp", $old_name, $new_name);
exit;
C'est tellement con quand on y repense...
Marsh Posté le 18-07-2005 à 13:51:00
et si tu utilisé le module perl File (http://search.cpan.org/~nwclark/perl-5.8.7/lib/File/Copy.pm), tu te ferai moins chié et tu n'utiliserai pas ces affreux appel à system pour faire un truc aussi trivial
Marsh Posté le 17-07-2005 à 17:51:29
Bonjour à tous,
J'ai un blème avec la gestion de fichier contenant des espaces:
Je parcours un répertoires conteant des fichiers. Ces fichiers ont des esapces dans leur nom, genre "Fichier de test.jpg"
Je cherche à changer le nom du fichier avec un script perl. Le script marche presque.
Je recupère le nom du fichier donné en arguement (my $name = $ARGV[0])
J'ajoute un préfixe à $name, et je change les blanc par des tirets ( s/\s/_/g ou un truc comme ça).
Ce qui me donne un nouveau nom de fichier.
La où ça se corse, c'est pour renommer le fichier. Je fait un appel systeme:
systeme ("mv $old_name $new_name" )
Le problème est que la varable $old_name contient des espaces. Donc mv voit plusieurs fichiers au lieu d'un seul. J'ai essayé plusieurs trucs, mais rien n'a marché. Pourtant je suis sur que c'est tout con.
Pourriez-vous m'aider ?