Algorithme, recursion de répertoire.
Bonjour,
Je me doute bien qu'il existe un tas de modules permettant de parcourir récursivement un répertoire, mais à titre personnel, je me demandais quelle genre de méthode l'on pouvait utilisée pour y arriver.
J'avais personnellement pensé à utiliser un tableau associatif, une boucle while(), à chaque fois qu'un répertoire est trouvé, on lance une autre fonction qui liste le contenu du répertoire et l'ajoute au tableau associatif.
En gros rapidement, j'ai codé ceci : (je débute complétement en perl, et j'apprécierai donc toutes critiques constructives concernant ce bout de code)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#!/usr/bin/perl
use warnings;
use strict;
sub recursermdir($);
sub listdir($$);
my %content = ();
print "Entrez le nom du répertoire à parcourir : ";
while (<STDIN>) {
chomp;
if (!(-d) ) { #je me sens plus à l'aise ainsi, y'a t'il une véritable utilité à une utiliser unless ?
print "Il ne s'agit pas d'un répertoire.\n";
last;
}
else {
if (/.*[^\/]$/) {
#$_ .= "/"; # On rajoute un / à la fin
}
recursedir($_);
}
print "Entrez le nom du répertoire à parcourir : "; #pour la boucle
}
sub recursedir($) {
my $dir = $_;
my ($key,$value,$total,$totaldir);
listdir(\$dir, \%content);
while (($key,$value) = each(%content)) {
$total++;
if (-d $key) {
$totaldir++;
listdir(\$key,\%content); #il s'agit d'un rép alors on le liste
}
}
print "Il y a ".($total - $totaldir)." fichiers & ".($totaldir)." répertoires, pour un total de $total\n";
}
sub listdir($$) {
my ($dir, $cont) = @_;
if ($$dir =~ /.*[^\/]$/ and -d $$dir) {
$$dir .= "/"; # on ajoute un / au cas où..
}
while (<$$dir*>) {
if (-d) {
$$cont{$_} = 'dir';
}
else {
$$cont{$_} = 'file';
}
}
return %$cont;
} |
ps: désolé, je viens de me rendre compte que je n'avais pas posté dans le bon forum, mille excuses.