2013-08-21 4 views
-1

Je souhaite traiter tous les fichiers (commençant par proc et se terminant par log) présents dans les sous-répertoires.Traiter tous les fichiers présents dans les sous-répertoires

J'ai essayé ci-dessous le code:

$InputDir: je prends cette ligne de commande:

find(
    sub { print $File::Find::name, "\n" if /Proc(.*)log$/ }, 
    $InputDir 
); 

Je veux prendre tous les fichiers avec le chemin complet dans le tableau.

+0

Quel est le problème avec votre code tel qu'il est? Il semble que cela devrait fonctionner, mais il trouve tous les fichiers qui * contiennent * 'Proc' et se terminent par' log'. Vous pouvez essayer '/^proc. * Log $/i' à la place. – Borodin

+0

Oui jusqu'à ce que cette partie est bien, mais je veux stocker tous les fichiers filtrés avec le chemin complet dans un tableau, de sorte que je puisse les traiter tous dans une autre boucle. – user381862

Répondre

2

To magasin les noms de fichiers au lieu de les imprimer, de les pousser dans un tableau:

my @files; 
find(
    sub { 
    push @files, $File::Find::name if -f and /^proc.*log$/i; 
    }, 
    $InputDir 
); 

print "$_\n" for @files; 

Les -f and vérifie que l'objet trouvé est un fichier, et non un répertoire.

1

Cela sonne comme une tâche pour File::Find::Rule

use File::Find::Rule ; 

my @files = File::Find::Rule->file() 
          ->name('Proc.*log') 
          ->in($InputDir ); 
Questions connexes