[File::Find::Rule] Problème désactivation récursivité
Bonjour,
en entrée, le contenu du répertoire /log est :
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
| dpi@uvmlsrv01 /log $ find .
.
./lost+found
find: `./lost+found': Permission denied
./controle
./controle/skel_uvmlsrv01.log
./tech
./tech/skel5-fnctl.pl_10829_20160803_154154.log
./tech/skel5-fnctl_10725_20160803_151229.log
./tech/skel5-fnctl_10732_20160803_151345.log
./tech/skel5-fnctl.pl_11021_20160803_164413.log
./tech/skel5-fnctl.pl_11063_20160803_165831.log
./tech/skel5-fnctl_10790_20160803_153108.log
./tech/skel5-fnctl.pl_10862_20160803_155524.log
./tech/skel5-fnctl.pl_11049_20160803_165235.log
./tech/dir1
./tech/dir1/dir11
./tech/dir1/dir11/dir111
./tech/dir1/dir11/dir111/testpto.txt
./tech/skel5-fnctl_10695_20160803_150344.log
./tech/skel5-fnctl.pl_10822_20160803_154101.log
./tech/skel5-fnctl.pl_10929_20160803_160713.log
./tech/skel5-fnctl.pl_11070_20160803_165903.log
./tech/skel5-fnctl_10773_20160803_152717.log
./testpto2.txt
./testpto3.txt |
Je souhaite au final lister les fichiers testpto* du répertoire de départ, cad /log, sans descendre dans les sous-répertoire.
Dans un premier temps, je descends dans les sous-répertoires avec le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #!/usr/bin/env perl
use strict;
use warnings;
use File::Find::Rule;
use feature 'say';
my $dir = shift;
my $pattern = 'testpto*';
my $lf_out = File::Find::Rule->directory
->name('lost+found')
->prune
->discard;
my $file_in = File::Find::Rule->file
->name($pattern);
my @files = File::Find::Rule->or ( $lf_out, $file_in )
->in ( $dir );
foreach my $f (@files) {
say $f;
} |
sortie :
Code:
1 2 3 4
| ./test_file_find_rule.pl /log
/log/testpto3.txt
/log/testpto2.txt
/log/tech/dir1/dir11/dir111/testpto.txt |
Maintenant, le problème survient lorsque je ne veux pas descendre dans les sous-répertoires. Mon interprétation est que la règle $recur_out est vraie si maxdepth est supérieur à 1 et est écartée avec le not :
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
|
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find::Rule;
use feature 'say';
my $dir = shift;
my $pattern = 'testpto*';
my $lf_out = File::Find::Rule->directory
->name('lost+found')
->prune
->discard;
my $recur_out = File::Find::Rule->directory
->maxdepth( '>1' );
my $file_in = File::Find::Rule->file
->name($pattern);
my @files = File::Find::Rule->or ( $lf_out, $file_in )
->not ( $recur_out )
->in ( $dir );
foreach my $f (@files) {
say $f;
} |
sortie :
Code:
1 2 3 4
| ./test_file_find_rule.pl /log
/log/testpto3.txt
/log/testpto2.txt
/log/tech/dir1/dir11/dir111/testpto.txt |