我正在编写一个脚本,它将遍历Perl脚本的大型目录,并检查某些内容。现在,它接受两种类型的输入:主目录或单个文件。如果提供了单个文件,它将对该文件运行main函数。如果提供了主目录,它将在该目录中的每个.pm和.pl上运行main函数(由于目录遍历的递归性质)。
我如何编写它(或者什么包可能会有帮助)-这样我也可以输入七个SUBdirectories中的一个,并且它只会遍历那个子目录(而不是整个目录)?
发布于 2012-05-16 08:47:52
更准确地说,一种方便的方法是使用优秀的Path::Class
module:Path::Class::Dir
的traverse()
方法。您将从回调函数中控制要处理的内容,该回调函数作为第一个参数提供给traverse()
。手册页包含示例代码片段。
当然,使用像opendir
这样的内置组件是完全可以的。
不过,我已经转向几乎所有地方都使用Path::Class
了,因为它有这么多方便的方法,而且感觉很好。请务必阅读docs for Path::Class::File
以了解可用的内容。99%的时间真的能做好这项工作。
发布于 2012-05-16 08:34:20
我真的看不出这两个目录参数在处理过程中的区别。当然,使用File::Find在这两种情况下都会做正确的事情。
就像这样..。
#!/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);
}
发布于 2012-05-15 19:49:58
如果您确切地知道要查看的目录和子目录,则可以使用glob("$dir/*/*/*.txt")
获取给定$dir
的第三级中的任何.txt
文件
https://stackoverflow.com/questions/10607746
复制