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 :

Lister les fichiers des répertoires et trouver la date des fichiers


Sujet :

Langage Perl

  1. #1
    Invité
    Invité(e)
    Par défaut Lister les fichiers des répertoires et trouver la date des fichiers
    Bonjour tout le monde;
    Je souhaite appliqué le code qui suit sur une liste de fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    file=~/chemin1/fic1
    perl -e 'use POSIX qw(strftime);print strftime("%Y:%m:%d:%H%M", localtime( (stat($ARGV[0]))[9] )), "\n";' $FILE
    Maintennat j'ai plusieurs fichiers et je veux automatiser la tâche, mais je bloque au niveau de la déclaration de liste de variables et comment les appeler par la suite.
    - autre question, je souhaiterai comme résultat:
    fic1 date_dernère_modification1
    fic2 date_dernère_modification2
    .
    .
    .
    Par avance, merci.
    PS: je suis débutante en perl.

  2. #2
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Bonjour,

    Je viens de te répondre sur ton précédent post:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/usr/bin/perl -w
    use strict;
    use warnings;
    use POSIX qw(strftime);
     
    foreach my $FILE (@ARGV) 
    {
        printf "$FILE : ";
        print strftime("%Y:%m:%d:%H%M", localtime( (stat($FILE))[9] )), "\n";
    }
    Lilian.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci Lilian,
    Mais où je dois declarer mes fichiers ?
    à quoi correspond (@ARGV)

  4. #4
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Désolé, je n'ai pas précisé comment appeler le script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    script.pl fichier1 fichier2 ... fichierN
    Lilian.

  5. #5
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ fd.pl .profile fd.pl
    .profile : 2011:03:24:1514
    fd.pl : 2011:04:29:1602
    $
    Lilian.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour tes réponses,
    je vais essayé d'être plus claire.

    j'ai 50 fichiers dans 50 repertoires différent sous Unix Bien sûre.

    je veux écrire un seul script où je peux appliquer ton premier code qui marche parfaitement sur un seul fichier.
    exemple de fichiers:
    ~/dir1/fic1.txt
    ~/dir2/fic2.txt
    ~/dir3/fic3.txt

    ce que je ne comprends à quoi correspod (@ARGV),
    j'ai testé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/usr/bin/perl -w
    use strict;
    use warnings;
    @ARGV=("~/dir1/fic1.txt","~/dir2/fic2.txt","~/dir3/fic3.txt"); 
     
    use POSIX qw(strftime);
     
    foreach my $FILE (@ARGV) 
    {
        printf "$FILE : ";
        print strftime("%Y:%m:%d:%H%M", localtime( (stat($FILE))[9] )), "\n";
    }
    mais il me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    script.sh[2]: use:  not found
    j'ai comme impression qu'il ne reconnait pas les MErci encore.

  7. #7
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Perl connait parfaitement l'instruction "use".

    Es-tu sûre que perl se trouve bien à
    La première ligne (le shebang #!...) a son importance, c'est avec cette ligne que le système sait avec quel binaire il faut exécuter le script.

    Donc, si perl ne se trouve pas sur /usr/bin/perl, il faut mettre à jour le shebang.

    Pour savoir où se trouve perl, tu peux essayer de taper ça:
    Pour ARGV, cette liste représente la liste des arguments passé à l’exécution du script.

    Il faut aussi éviter de la redéfinir dans le script.

    Lilian.

  8. #8
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    J'ai renommé votre fil car l'intitulé n'était pas clair. Merci de penser la prochaine fois à mettre des titres clairs et précis.

    Pour revenir à votre problème, le but de votre programme est de pouvoir lister plusieurs fichiers présents dans plusieurs répertoires, puis de calculer la date de modification de chacun des fichiers.
    Votre programme doit être capable de :
    1. Prendre en argument un nom de répertoire ou plusieurs (tout dépend de ce que vous souhaitez
    2. de lister ce(s) répertoire(s)
    3. de calculer la date de chaque fichier


    Pour chacun de ces points, les codes sont déjà disponibles dans la rubrique Perl dans les sources ou FAQ (c'est à ça que ça sert ).

    1. Comment récupérer proprement les arguments de la ligne de commande ? (dans les sources)
    2. Comment lister les fichiers d'un répertoire ? (dans les sources)
    3. Information sur un fichier en Perl (dans la FAQ) : stat


    Il suffit maintenant de faire un mimac de tout ça pour concevoir un programme Perl propre et fonctionnel, allez, au boulot !!

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci à tous.
    j'ai réussi.
    @ djibril: merci pour les liens. et la modification du titre du topic.
    @lilian: merci pour ton aide.
    Au fait mon script marchait bien. mais au lieu de le lancer avec le Perl, je le lançait avec le Shell. Grrr

    Merci encore.
    Jasmine.

Discussions similaires

  1. [sh] Lister des répertoires écrits "en dur" dans des fichiers
    Par melouze dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 02/06/2014, 17h14
  2. [PHP 5.1] Lister les dossiers du répertoire racine sur un site
    Par tonio17 dans le forum Langage
    Réponses: 2
    Dernier message: 21/07/2009, 13h19
  3. elever les droits de l'application Java pour créer des répertoires.
    Par turican2 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/06/2009, 11h54
  4. Réponses: 0
    Dernier message: 02/11/2007, 21h34
  5. Réponses: 2
    Dernier message: 07/07/2007, 14h24

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