Bonjour,
en entrée, le contenu du répertoire /log est :
Je souhaite au final lister les fichiers testpto* du répertoire de départ, cad /log, sans descendre dans les sous-répertoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Dans un premier temps, je descends dans les sous-répertoires avec le code suivant :
sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ./test_file_find_rule.pl /log /log/testpto3.txt /log/testpto2.txt /log/tech/dir1/dir11/dir111/testpto.txt
sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ./test_file_find_rule.pl /log /log/testpto3.txt /log/testpto2.txt /log/tech/dir1/dir11/dir111/testpto.txt
Partager