gpt4 book ai didi

perl - 如何在 Perl 脚本中递归查找文件/文件夹?

转载 作者:行者123 更新时间:2023-12-04 09:02:57 27 4
gpt4 key购买 nike

我有一个 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 函数,并提供这些模块函数使用的清晰示例。

最佳答案

另一个可以使用的优秀模块是File::Find::Rule这隐藏了 File::Find 的一些复杂性同时暴露出同样丰富的功能。

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;
}

关于perl - 如何在 Perl 脚本中递归查找文件/文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5089680/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com