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 :

Déterminer les fichiers et les dossiers


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Par défaut Déterminer les fichiers et les dossiers
    Bonjour tout le monde,

    Je veux déterminer tous les chemins des fichiers et des répetoires qui sont sous une racine qui sert comme argument d'entrée.

    Par exemple : le chemin de la racine qui est a/b/racine

    et ça doit me donner une liste de ts les dossiers et de ts les fichiers qui sont sous a/b.

    N'importe quelle astuce sera la bienvenue.

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Soit tu utilises les fonctions opendir/readdir/closedir, soit tu utilises un glob, soit tu utilises le module File::Find (ou l'un des modules dérivés à l'interface plus élégante comme File::Finder ou File::Find::Rule).

    --
    Jedaï

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Par défaut
    oki, je pense klmodule sera plus efficace, merci

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Par défaut
    EN fait g jamais utilisé ce module, tu peux me diriger si tas deja eu loccasion de bosser avec?

  5. #5
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    De quel module parles-tu ? File::Find ?
    As-tu lu sa documentation ? Oui je sais que son interface est un peu agressive pour un débutant en programmation, c'est pour ça que j'ai suggéré plutôt File::Finder ou File::Find::Rule...
    Mais si tu préfères te servir uniquement de modules du CORE, et que ton objectif est réellement de récupérer une liste de tous les fichiers dans les dossiers et sous-dossier sous une racine /a/b, le code suivant conviendra :
    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
    #!/usr/bin/env perl
    use strict;
    use warnings;
     
    use File::Find;
     
    find( \&push_filename, '/a/b' );
    my @files_and_dirs;
    sub push_filename {
      push @files_and_dirs, $File::Find::name;
    }
     
    # travail avec la liste
     
    __END__
    Néanmoins, la plupart du temps quand on demande une telle liste, ce qu'on veut réellement c'est faire quelque chose à tous les éléments de cette liste, et de plus on ne veut en réalité que les véritables fichiers (pas les liens symboliques, pas les pipes, pas les répertoires), et dans ce cas le programme ressemble plutôt à ça :
    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
    #!/usr/bin/env perl
    use strict;
    use warnings;
     
    use File::Find;
     
    find( \&do_something_to_the_real_files, '/a/b' );
     
    sub do_something_to_the_real_files {
      if( -f $_ ) {
        # travail avec $_
      }
    }
     
    __END__
    L'avantage c'est qu'on a pas besoin ainsi de stocker une énorme liste inutile en mémoire.

    Attention, l'une des chausse-trappes de ce module est que le répertoire de travail du script est changé au cours de l'exécution de find(), en particulier dans la fonction de callback (le premier paramètre de find() ), lors de son exécution le répertoire courant est le répertoire du fichier qu'on est en train d'examiner (et dont le nom se trouve dans $_, alors que son chemin complet est dans $File::Find::name).

    --
    Jedaï

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Par défaut
    Je parlais de FILE::FIND. Wi tas raison , mon but et de collecter ts les chemins des fichiers ds un tableau et ts les chemins des dossiers ds un tableau. Bon je vais essayer de me docummenter alors...On mavait di ke je pouvais faire cela en 5 lignes, on verra bien ..

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/08/2007, 12h46
  2. Enumerer les fichiers d'un dossier
    Par Zazeglu dans le forum C
    Réponses: 5
    Dernier message: 10/03/2006, 22h28
  3. Réponses: 5
    Dernier message: 18/01/2006, 14h05
  4. [LG] Accéder à tous les fichiers d'un dossier
    Par arno15 dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2005, 10h18

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