Comment puis-je récursivement lire les répertoires en Perl?
Je veux lire un répertoire de façon récursive d'imprimer la structure des données dans une Page HTML avec Modèle::boîte à outils.
Mais je suis suspendu dans la façon d'enregistrer les Chemins d'accès et des Fichiers dans un format qui peut être lu facilement.
Mon idée a commencé comme ça
sub list_dirs{
my ($rootPath) = @_;
my (@paths);
$rootPath .= '/' if($rootPath !~ /\/$/);
for my $eachFile (glob($path.'*'))
{
if(-d $eachFile)
{
push (@paths, $eachFile);
&list_dirs($eachFile);
}
else
{
push (@files, $eachFile);
}
}
return @paths;
}
Comment pourrais-je résoudre ce problème?
OriginalL'auteur Przemek | 2010-03-19
Vous devez vous connecter pour publier un commentaire.
Cela devrait faire l'affaire
c'est correct, il va seulement récupérer les fichiers à partir d'un répertoire donné.
OriginalL'auteur Htbaa
Vous devriez toujours utiliser stricte et des avertissements pour vous aider à déboguer votre code. Perl vous aura prévenu par exemple que
@files
n'est pas déclaré. Mais le vrai problème avec votre fonction, vous déclarez une variable lexicale@paths
sur chaque appel récursif delist_dirs
et ne poussez pas la valeur de retour après la récursivité étape.Si vous ne souhaitez pas installer des modules supplémentaires, la solution suivante devrait sans doute vous aider:
Pouvez-vous me montrer le code que vous utilisez pour examiner cette? Il fonctionne très bien ici. Peut-être le tester avec "l'utilisation de Dumper; print Dumper list_dirs '/home'".
OriginalL'auteur mdom
La réponse par mdom explique comment votre première tentative qui s'est égaré. Je vous suggérons également d'envisager des alternatives plus respectueuses de
File::Find
. CPAN dispose de plusieurs options. En voici une.Voir aussi ici:
DONC réponse fournir CPAN
des alternatives à
File::Find
.DONC, la question sur l'annuaire des itérateurs.
Et ici est une réécriture de votre solution récursive. Choses à noter:
use strict
;use warnings
; et l'utilisation d'une portée de bloc pour créer une variable statique de la sous-routine.OriginalL'auteur FMc
Je pense que vous avez un problème dans la ligne suivante dans votre code
Vous modifiez la variable $path $rootpath.
Il va stocker correctement le chemin d'accès.
OriginalL'auteur kiruthika
J'utilise ce script pour supprimer les fichiers cachés (créé par Mac OS X) à partir de ma clé USB Pendrive, où j'ai l'habitude de l'utiliser pour écouter de la musique dans la voiture, et tout fichier se terminant par ".mp3, même lorsqu'il démarre avec "._", sera répertorié dans la voiture, de l'audio de la liste.
OriginalL'auteur GMP
vous pouvez utiliser cette méthode récursive de recherche de fichier qui séparent des types de fichiers spécifiques,
OriginalL'auteur Nima Soroush