J'ai un script Perl que j'ai écrit pour rechercher des fichiers présents dans mes dossiers Windows, récursivement. Je saisis le texte de recherche comme argument d'exécution du script Perl pour trouver un fichier ayant ce texte dans son nom. Le script Perl est comme ci-dessous: mais cela ne recherche pas tous les sous-répertoires récursives. Je sais Mais j'ai eu une erreur disant question est, dans le script Perl ci-dessus, comment recherchez-moi des fichiers / dossiers récursivement? P> Deuxième questions, j'ai trouvé que Pouvez-vous indiquer une bonne aide / document / livre pour utiliser diverses fonctions Perl à partir de différents modules Perl avec des exemples clairs d'utilisation de ces fonctions de module. P> P> glob code> ne correspond pas récursivement.
Tellement essayé d'utiliser le module Fichier :: Rechercher code> et la fonction
Trouver (\ & Wanted, @directories); code> p>
trouver () code> non défini. De ce que j'ai lu de l'aide, je pensais que la fonction
trouver () code> est définie par défaut dans l'installation PERL, avec un code de base pour rechercher des dossiers / fichiers. N'est-ce pas correct? P>
perdoc < Module> Aide Code> n'a pas d'exemples sur l'utilisation d'une certaine fonction dans ce module, ce qui le ferait clairement. P>
5 Réponses :
Ces deux pages sont tout ce dont vous avez besoin pour étudier: p>
Link Seules les réponses sont découragées sur les sites Stackexchange. Un exemple de code court, comme dans d'autres réponses, aurait été très accueilli.
Une alternative serait d'utiliser FINT2PERL pour créer le début du script pour vous. Il peut activer une commande de recherche comme, à un script Perl équivalent. Vous venez de mettre Find2perl au lieu de trouver. Il utilise le fichier :: Trouvez sous le capot mais vous va aller rapidement. P> p>
Merci. Lear Not This Findt2perl et n'a pas trouvé de démarreur très utile d'obtenir des scripts de recherche de fichiers par défaut que je joue avec.
En effet, je pense que la réponse de Alessandro est vraiment meilleure mais pour vous aider à trouver 2perl est vraiment utile.
Si cela ne vous dérange pas d'utiliser le module CPAN, chemin :: Classe peut faire le travail pour vous:
BTW, bonne nouvelle, dans mes tests, cela semble également travailler sur une nouvelle copie de OSX Lion (10.8.5) jusqu'à mon dernier test que j'ai fait sur OSX El Capitan (10.11) sans avoir à installer le module. Donc, si vous étiez comme moi, construire un installateur qui s'appuyait sur ce fonctionnement par défaut - il fait.
Un autre excellent module à utiliser est Fichier :: Trouver :: Rule qui cache une partie de la complexité de fichier :: trouve tout en exposant la même fonctionnalité riche.
use File::Find::Rule; use Cwd; my $cwd = getcwd(); my $filelist; sub buildFileIndex { open ($filelist, ">", "filelist.txt") || die $!; # File find rule my $excludeDirs = File::Find::Rule->directory ->name('demo', 'test', 'sample', '3rdParty') # Provide specific list of directories to *not* scan ->prune # don't go into it ->discard; # don't report it my $includeFiles = File::Find::Rule->file ->name('*.txt', '*.csv'); # search by file extensions my @files = File::Find::Rule->or( $excludeDirs, $includeFiles ) ->in($cwd); print $filelist map { "$_\n" } @files; return \$filelist; }
Je pense qu'il peut y avoir deux petites erreurs avec ce code (pour tout «noob» l'essayer) d'abord, il n'y a pas de lien avec le sous-programme lui-même, alors rien ne serait utilisé. (besoin de "& BuildfileIndex;" sous getcwd ();) En outre, le fichier TXT "ouvert" n'est pas "fermé", le fichier ne serait donc pas lisible par un autre code. Juste une pensée
use 5.022; use strict; use warnings; use POSIX qw(uname); use File::Find; my $kernel_ver = (uname())[2]; my @dir = ( "/lib/modules/$kernel_ver/kernel/drivers" ); find(\&wanted, @dir); sub wanted { say if /.*\.ko\.xz/; }
Ma méthode de cette question Stackoverflow.com/Questtions/4979310/... pourrait aider. Dans ce cas, la tâche était de renommer tous les fichiers et dossiers d'un répertoire et de tous les sous-répertoires. La méthode pourrait facilement être modifiée pour vos utilisations.