Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1915 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  PERL + bash: gestion des espaces vides dans les noms de fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PERL + bash: gestion des espaces vides dans les noms de fichier

n°707540
Rasthor
Posté le 17-07-2005 à 17:51:29  profilanswer
 

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 ?

mood
Publicité
Posté le 17-07-2005 à 17:51:29  profilanswer
 

n°707541
jlighty
Posté le 17-07-2005 à 17:57:12  profilanswer
 

fais mv "$old_name" "$new_name"

n°707542
sebchap
Share the knowledge
Posté le 17-07-2005 à 17:57:38  profilanswer
 

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 :whistle:


Message édité par sebchap le 17-07-2005 à 17:58:13
n°707544
jlighty
Posté le 17-07-2005 à 18:00:39  profilanswer
 

je viens de verifier avec un script de ce type :

Code :
  1. #!/bin/sh
  2. a="toto to";
  3. af="toto_to";
  4. mv "$a" "$af"


et j'ai bien un fichier toto_to au final

n°707547
Rasthor
Posté le 17-07-2005 à 18:04:30  profilanswer
 

Merci les gars, j'essayerais tout ça demain et je vous tiens au courant. ;)

n°707549
sebchap
Share the knowledge
Posté le 17-07-2005 à 18:15:53  profilanswer
 

jlighty a écrit :

je viens de verifier avec un script de ce type :

Code :
  1. #!/bin/sh
  2. a="toto to";
  3. af="toto_to";
  4. mv "$a" "$af"


et j'ai bien un fichier toto_to au final


Ouai, le probleme est de savoir si Perl va comprendreet bien interprété les "" :/

n°707551
jlighty
Posté le 17-07-2005 à 18:17:35  profilanswer
 

il n'a cas tous faire en sh, avec sed pour remplacer les espaces par les underscores.

n°707558
sebchap
Share the knowledge
Posté le 17-07-2005 à 18:20:28  profilanswer
 

C'est ce que j'aurai fait aussi.... puisque je capte rien au perl :lol:
D'ailleurs ca m'interesse pas mal de m'y mettre (à perl et/ou python d'ailleurs) :)

n°707836
Rasthor
Posté le 18-07-2005 à 10:51:30  profilanswer
 

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...
 

n°707837
Rasthor
Posté le 18-07-2005 à 10:53:14  profilanswer
 

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]

mood
Publicité
Posté le 18-07-2005 à 10:53:14  profilanswer
 

n°707838
Rasthor
Posté le 18-07-2005 à 10:54:42  profilanswer
 

print "@ARGV\n";
 
=> ça marche !!!

n°707844
Rasthor
Posté le 18-07-2005 à 11:10:02  profilanswer
 

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... :pt1cable:

n°707882
the_fireba​ll
I have fucking failed
Posté le 18-07-2005 à 13:51:00  profilanswer
 

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 :)


---------------
Two thousand years of misery, of torture in my name, hypocrisy made paramount, paranoia the law, my name is called religion, sadistic, sacred whore.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  PERL + bash: gestion des espaces vides dans les noms de fichier

 

Sujets relatifs
Distrib mini serveur fichier+impressionImpossible d'acceder au fichier hdlist :(
Problème dedownload de fichier d'un serveur apacheComment lire les fihier ds_store (fichier max) sous windows ?
Probleme partage fichier serveur SambaPanel de gestion d'hébergement.
besoin d'un pro du wifi pour partage de fichiergestion bande passante
Restauration de fichier supprimés avec RM ?Worker file manager : configuration pour lancer un fichier
Plus de sujets relatifs à : PERL + bash: gestion des espaces vides dans les noms de fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR