我有一个 perl 脚本,我编写了该脚本来递归地搜索 Windows 文件夹中的文件。我输入搜索文本作为 perl 脚本运行时参数,以查找名称中包含此文本的文件。 perl脚本如下:
use Cwd;
$file1 = @ARGV[0];
#@res1 = glob "*test*";
#@res1 = glob "$file1*";
@res1 = map { Cwd::abs_path($_) } glob "$file1*";
foreach (@res1)
{
print "$_\n";
}
但这并不是递归地搜索所有子目录。我知道glob
不递归匹配。
所以尝试使用模块File::Find
和函数find(\&wanted, @directories);
但我收到一个错误说find()
不明确的。从我从帮助中读到的内容来看,我想find()
函数在 Perl 安装中默认定义,带有一些基本代码来查找文件夹/文件。难道不对吗?
问题是,在上面的 perl 脚本中,如何递归搜索文件/文件夹?
第二个问题,我发现perldoc <module> help
没有关于在该模块中使用某个函数的示例,这可以清楚地说明这一点。
您能否指出一些好的帮助/文档/书籍来使用不同 Perl 模块中的各种 Perl 函数,并提供这些模块函数的使用的清晰示例。
另一个优秀的模块是文件::查找::规则 http://search.cpan.org/~rclamp/File-Find-Rule-0.32/lib/File/Find/Rule.pm这隐藏了一些复杂性文件::查找 http://search.cpan.org/~rjbs/perl-5.12.3/lib/File/Find.pm同时暴露同样丰富的功能。
use File::Find::Rule;
use Cwd;
my $cwd = getcwd();
my $filelist;
sub buildFileIndex {
open ($filelist, ">", "filelist.txt") || die $!;
# File find rule
my $excludeDirs = File::Find::Rule->directory
->name('demo', 'test', 'sample', '3rdParty') # Provide specific list of directories to *not* scan
->prune # don't go into it
->discard; # don't report it
my $includeFiles = File::Find::Rule->file
->name('*.txt', '*.csv'); # search by file extensions
my @files = File::Find::Rule->or( $excludeDirs, $includeFiles )
->in($cwd);
print $filelist map { "$_\n" } @files;
return \$filelist;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)