IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

commande unix en perl


Sujet :

Langage Perl

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut commande unix en perl
    Bonjour à tous,

    Je cherche à exécuter des commandes unix directement à partir d'un script perl. j'ai des fichiers dont l'extension est .fa.ct et je voudrais les modifier en .ct ; j'arrive très bien à le faire grace à la commande unix :
    ls *.fa.ct | sed 's/\(.*\)\.fa\.ct/mv \1\.fa\.ct \1\.ct/g' | sh

    mais quand je l'inclus dans mon script perl comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/usr/bin/perl
    use strict;
    use warnings;
     
     
    my $rep = "/home/stephanie/Téléchargements/unafold-3.8/Liste25_négative";
     
    chdir $rep;
     
    my @ss_file = glob('*.fa.ct');
     
    foreach my $v (@ss_file) {
    	`s/\(.*\)\.fa\.ct/mv \1\.fa\.ct \1\.ct/g` ;
    	print $v."\n";
     
     
    }
    D'un part, j'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh: Syntax error: word unexpected (expecting ")")
    et ensuite cela ne modifie pas le nom de mes fichiers dans mon dossier. Peut être que ce type de commande n'est pas réalisable via perl ?

    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    bonjour,

    Plutôt que d'utiliser une commande unix, il vaut mieux utiliser la fonction move du module File::Copy (ca sera plus portable)

    Voici un exemple qui devrait marcher :
    1) on liste les fichiers .fa.ct
    2) on substitue l'extension par .ct
    3) on déplace le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    use strict;
    use warnings;
    use File::Glob ':glob';
    use File::Copy;
     
     
    my @files_fa_ct = bsd_glob("*.fa.ct");
     
    foreach my $file_fa_ct(@files_fa_ct){
     
        my $ct_outfile = $file_fa_ct;
        $ct_outfile =~ s/.fa.ct$/.ct/;
     
        move($file_fa_ct, $ct_outfile) or die "move error : $!";
     
    }

  3. #3
    Membre actif
    Avatar de Grumphette
    Homme Profil pro
    Validation manager
    Inscrit en
    Juillet 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Validation manager

    Informations forums :
    Inscription : Juillet 2008
    Messages : 81
    Par défaut
    je vois que tu es sous linux, un appel system à rename ça fait la même chose non? et ptet avec un peu moins de ressource systeme, parce que rien ne garanti que ses fichiers soient petit et les copiers peut prendre un peu de temps.

    Grumphette

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Il n'y a aucun intérêt de faire du perl pour appeler de l'unix lorsque l'on peut le faire directement en Perl. Utilise directement la fonction rename de Perl.

Discussions similaires

  1. executer commande unix depuis perl
    Par painouch21 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 08/02/2008, 08h11
  2. command Unix (+ clavier) sous perl
    Par goanes dans le forum Langage
    Réponses: 8
    Dernier message: 31/08/2007, 18h13
  3. [perl] Pipe dans une commande UNIX
    Par floxi dans le forum Linux
    Réponses: 6
    Dernier message: 29/08/2007, 00h21
  4. lancer une commande unix avec perl
    Par dm_manu dans le forum Langage
    Réponses: 1
    Dernier message: 02/08/2006, 19h41
  5. [langage] Commande Unix en Perl
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 20/11/2002, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo