我尝试使用perl从特定位置获取.config文件。但我想从隐藏目录中省略相同的扩展文件。如何将代码作为预期输出结果:
我尝试过的代码:
use strict;
use warnings;
use File::Find::Rule;
my @files = File::Find::Rule->file()
->name( '*.config' )
->in( '/home/rsa/MODE/' );
for my $file (@files) {
print "file: $file\n";
}
上述代码的输出:
file:/home/rsa/MODE/p_s/p1/b1/c3/r1/rev.config
file:/home/rsa/MODE/p_s/p1/b1/c3/r5/.bhat/rev.config
file:/home/rsa/MODE/p_s/p1/b1/c3/r5/.lrayan/rev.config
预期产出:
我应该在没有隐藏目录文件扩展名的情况下得到输出。
file:/home/rsa/MODE/p_s/p1/b1/c3/r1/rev.config
答案 0 :(得分:1)
该文档有一个跳过CSV目录的示例。在这种情况下,您需要做更多工作,因为.*
也匹配.
:
my $rule = File::Find::Rule->new;
$rule->or( $rule->new
->directory
->name( '.*' )
->not_name( '.' )
->prune
->discard,
$rule->new
->file
->name( '*.config' ));
my @files = $rule->in( $ENV{HOME} );
在评论中提及ikegami时,name->not_name
可以通过
->name( '.?*' )
或
->name( qr/^\../ )
即。点后跟任何东西。
答案 1 :(得分:0)
你可以在name
中使用正则表达式而不是glob模式,就像这样
my @files = File::Find::Rule->file()
->name( qr/^[^.].*\.config$/ )
->in( '/home/rsa/MODE/' )