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

2024-05-02

我有一个 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(使用前将#替换为@)

如何在 Perl 脚本中递归查找文件/文件夹? 的相关文章

随机推荐

  • 确保在 ServerName 上启用默认 admin$ 共享

    运行 psexec 命令在同一网络上的服务器上远程安装或执行某些内容时 显示以下错误 无法访问服务器名称 找不到网络名称 确保在 ServerName 上启用默认 admin 共享 大多数参考文献建议您将以下内容添加到注册表中 但在我的例子
  • 当我启动程序时,Arduino IDE (Win10) 崩溃

    我的 Arduino IDE Win10 上的版本为 1 8 12 在启动时崩溃 运行arduino debug exe我收到此错误消息 C Program Files x86 Arduino gt arduino debug exe Se
  • CKEditor 4 构建(缩小和丑化)

    在我们的构建过程中 使用 grunt 我们将所有脚本连接 缩小和丑化为一个脚本 也意味着仅一个请求 现在 CKEditor 4 似乎正在使用模块样式加载方法 谁能告诉我如何将 CKEditor 4 包含到包含所有必需源的项目中 这样以后就不
  • 前台服务不持续运行

    在我的应用程序中 我使用必须不断运行的前台服务 有时前台服务会停止 在什么情况下操作系统会终止我的服务 即使有足够的内存 电池已充满 手机正在充电也会发生 到目前为止 我的代码是这样的 public class ServiceTest ex
  • 使用 Xcode 5 在装有 iOS 5.1.1 的设备中运行 iOS 应用程序

    我正在尝试在运行 iOS 5 1 1 的 iPad 上安装 iOS 应用程序 当我使用带有开发配置文件的 Xcode 启动它时 出现以下错误 Xcode 无法安装或启动支持 64 位的应用程序 运行 iOS 6 0 之前版本的设备上的架构
  • 如何动态调用动态对象的方法?

    当我想在 C 中的任何对象上动态调用静态定义的 静态 是指 在编译时确定 的意义上 而不是 类级成员 的意义上 方法时 我可以使用反射获取该方法的句柄并调用它 typeof Foo GetMethod Bar Invoke foo new
  • 线程与并行处理

    Microsoft NET 4 0 为其框架引入了新的 并行增强功能 我想知道使用标准 System Threading 函数与新的并行增强功能创建应用程序之间有什么区别 并行扩展和常规线程之间最重要的区别可能是控制流 一个线程 使用创建n
  • 如何避免使用全局变量?

    我使用全局变量 但我读到它们不是一个好的实践或Pythonic 我经常使用的函数会给出许多是 否变量 我需要在主函数中使用这些变量 例如 在不使用全局变量的情况下 如何编写以下代码 def secondary function global
  • 使用 Android NDK 使用 -fsigned-char 进行构建安全吗?

    为了与其他平台保持一致 我需要使用signed char在我正在处理的一些本机代码中 但默认情况下在Android NDK上char类型是unsigned 我尝试明确使用signed char类型 但它生成太多警告differ in sig
  • 如何从命令行向 Android 项目添加外部 jar 库

    我正在尝试构建一个具有一些依赖项的 Android 项目 jar 文件位于 lib 目录中 我可以通过将这些 jar 文件添加到我的类路径来构建项目 但当然它会在模拟器中强制关闭 因为这些库不存在 我正在使用 ant 从命令行执行此操作 n
  • 拆分数字 yyyymmdd 列

    我有一个包含 DATE 列的数据框 我将其引用为 NM DATA DATE 它是一个 yyyymmdd 形式的数字 我知道 有一百个线程 我尝试了所有能找到的解决方案 但它们对我不起作用 即将重新加载 RStudio NM DATA DAT
  • 神经网络的局部逆

    我有一个带有 N 个输入节点和 N 个输出节点的神经网络 可能还有多个隐藏层和循环 但让我们先忘记这些 神经网络的目标是学习一个N维变量Y 给定N维值X 假设神经网络的输出是Y 学习后应该接近Y 我的问题是 是否有可能得到输出 Y 的神经网
  • 使用罗马图书馆获取所有 RSS 提要条目

    我正在使用 Java 的 Rome 库来解析一些 RSS 默认情况下需要 25 个条目 请告诉我 如何获得接下来的 25 个条目 我的测试代码是 public static SyndFeed getSyndFeedForUrl String
  • Bootstrap 模态对话框,show.bs.modal 事件相关Target 未定义。我怎样才能获得被点击的元素?

    按钮调用模式对话框 单击按钮时 会触发事件 结果事件引用 e latedTarget 未定义 那么 如何从处理程序中获取调用按钮呢 e 似乎不包含任何对调用按钮的引用
  • Python:urlretrieve PDF下载

    我在 Python 中使用 urllib 的 urlretrieve 函数来尝试从网站上获取一些 pdf 它 至少对我来说 已停止工作并正在下载损坏的数据 15 KB 而不是 164 KB 我已经用几个 pdf 对此进行了测试 但都没有成功
  • 在 Objective C 中使用余弦定律计算两点之间的距离?

    我从 Google 地图获取一些 GPS 坐标 我需要找到它们之间的距离 使用 Objective C 我已经实现了该公式 但得到的结果太大了 我通过将 Google 地图的值传回 Google 地球和互联网上的地理编码服务来测试这些值 一
  • 创建数据库索引的最佳实践和“经验法则”有哪些?

    我有一个应用程序 它循环访问数据库表中的大量记录 并对该数据库中的记录执行大量 SQL 和 Net 操作 目前我在 PostgreSQL 上使用 Castle ActiveRecord 我在几个字段上添加了一些基本的 btree 索引 正如
  • 如何从给定经纬度矩形的谷歌地图中提取卫星图像?

    如何从给定经纬度矩形的谷歌地图中提取卫星图像 或者 形成边界框的两个 纬度 经度 点 在我看来 你的问题听起来像是你想提取 Google 地图上使用的原始卫星图块 这违反了使用条款 如果您坚持这样做 我很确定您会被禁止使用该服务 所以 不要
  • 原则:由数据库将 CURRENT_TIMESTAMP 设置为默认值(即不是由 PHP)

    环顾了一段时间后 我仍然找不到一种方法来获取数据库服务器插入的 CURRENT TIMESTAMP 作为默认值 INSERT 问题 当你将一个对象持久化到数据库时 Doctrine 会将缺失的字段显式设置为 NULL 所以看起来 在表定义中
  • 如何在 Perl 脚本中递归查找文件/文件夹?

    我有一个 perl 脚本 我编写了该脚本来递归地搜索 Windows 文件夹中的文件 我输入搜索文本作为 perl 脚本运行时参数 以查找名称中包含此文本的文件 perl脚本如下 use Cwd file1 ARGV 0 res1 glob