首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl子目录遍历

Perl子目录遍历
EN

Stack Overflow用户
提问于 2012-05-15 19:45:50
回答 3查看 572关注 0票数 1

我正在编写一个脚本,它将遍历Perl脚本的大型目录,并检查某些内容。现在,它接受两种类型的输入:主目录或单个文件。如果提供了单个文件,它将对该文件运行main函数。如果提供了主目录,它将在该目录中的每个.pm和.pl上运行main函数(由于目录遍历的递归性质)。

我如何编写它(或者什么包可能会有帮助)-这样我也可以输入七个SUBdirectories中的一个,并且它只会遍历那个子目录(而不是整个目录)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-16 08:47:52

更准确地说,一种方便的方法是使用优秀的Path::Class modulePath::Class::Dirtraverse()方法。您将从回调函数中控制要处理的内容,该回调函数作为第一个参数提供给traverse()。手册页包含示例代码片段。

当然,使用像opendir这样的内置组件是完全可以的。

不过,我已经转向几乎所有地方都使用Path::Class了,因为它有这么多方便的方法,而且感觉很好。请务必阅读docs for Path::Class::File以了解可用的内容。99%的时间真的能做好这项工作。

票数 1
EN

Stack Overflow用户

发布于 2012-05-16 08:34:20

我真的看不出这两个目录参数在处理过程中的区别。当然,使用File::Find在这两种情况下都会做正确的事情。

就像这样..。

代码语言:javascript
运行
AI代码解释
复制
#!/usr/bin/perl

use strict;
use warnings;

use File::Find;

my $input = shift;

if (-f $input) {
  # Handle a single file
  handle_a_file($input);
} else {
  # Handler a directory
  handle_a_directory($input);
}

sub handle_a_file {
  my $file = shift;

  # Do whatever you need to with a single file
}

sub handle_a_directory {
  my $dir = shift;

  find(\&do this, $dir);
}

sub do_this {
  return unless -f;
  return unless /\.p[ml]$/;

  handle_a_file($File::Find::name);
}
票数 2
EN

Stack Overflow用户

发布于 2012-05-15 19:49:58

如果您确切地知道要查看的目录和子目录,则可以使用glob("$dir/*/*/*.txt")获取给定$dir的第三级中的任何.txt文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10607746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档