使用 File::Find::Rule 从数组中排除 root/base 目录
excluding root/base directory from an array using File::Find::Rule
我正在尝试使用 File::Find::Rule 读取子目录,但我的代码也是 printing/reading 基本目录以及子目录。我怎样才能更正 cvs 示例 (http://search.cpan.org/~rclamp/File-Find-Rule-0.34/lib/File/Find/Rule.pm) 方法的使用,该方法已在一些类似的帖子中进行了解释。我的代码看起来像 -
use File::Find::Rule;
my $directory = './test_dir/';
my $rule = File::Find::Rule->new; $rule -> or($rule ->new
-> directory
->name('test_dir')
->prune
->discard,
$rule->new);
my @subdirs = $rule->in($directory);
仍然在 @subdir 中列出 ./test_dir。
您可以使用grep
排除搜索目录。
my @subdirs = grep { $_ ne $directory } $rule->in($directory);
在那种情况下,您必须更改 $directory
的内容以匹配 File::Find 输出它的方式。没有尾部斜杠,也没有前导 ./
。只需使用名称,或直接相对路径。
my $directory = 'test_dir';
my $other_dir = 'foo/bar/baz'; # multi-level depths would look like this
我正在尝试使用 File::Find::Rule 读取子目录,但我的代码也是 printing/reading 基本目录以及子目录。我怎样才能更正 cvs 示例 (http://search.cpan.org/~rclamp/File-Find-Rule-0.34/lib/File/Find/Rule.pm) 方法的使用,该方法已在一些类似的帖子中进行了解释。我的代码看起来像 -
use File::Find::Rule;
my $directory = './test_dir/';
my $rule = File::Find::Rule->new; $rule -> or($rule ->new
-> directory
->name('test_dir')
->prune
->discard,
$rule->new);
my @subdirs = $rule->in($directory);
仍然在 @subdir 中列出 ./test_dir。
您可以使用grep
排除搜索目录。
my @subdirs = grep { $_ ne $directory } $rule->in($directory);
在那种情况下,您必须更改 $directory
的内容以匹配 File::Find 输出它的方式。没有尾部斜杠,也没有前导 ./
。只需使用名称,或直接相对路径。
my $directory = 'test_dir';
my $other_dir = 'foo/bar/baz'; # multi-level depths would look like this