0

我想列出包含所需目录的目录路径。

例如:

                                 /usr1
                                    |
                                    |
                -----------------------------------------   
                |                                       |
            /local1                                     /local2
                |                                       |
              dir1                                      dir1

我想使用通配符找到 dir1 所在的目录路径*

从 linux 命令行我可以这样做以获得结果。

find /usr1/local* -name dir1 -type d

然后它会显示

/usr1/local1/dir1
/usr1/local2/dir1

我如何处理 File::Find perl 模块。

我不想使用system`` 完成它。

4

1 回答 1

7

相当于

find /usr1/local* ...

find(..., glob("/usr1/local*"))

所以整体是

use File::Basename qw( basename );
use File::Find     qw( find );

my $wanted = sub {
   say if basename($_) eq "dir1" && -d $_;
};

find({ wanted => $wanted, no_chdir => 1 }, glob("/usr1/local*"));

就个人而言,我更喜欢File::Find::Rule

use File::Find::Rule qw( );

say
   for
      File::Find::Rule
         ->name('dir1')
         ->directory
         ->in(glob("/usr1/local*"));
于 2016-07-21T13:14:22.237 回答