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. ![[:dao] [:dao]](https://forum-images.hardware.fr/images/perso/dao.gif)
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 ?