如何列出多个目录的父目录和子目录中的所有文件?
$dir="/home/httpd/cgi-bin/r/met";
opendir(DIR,"/home/httpd/cgi-bin/r/met")||die"error";
while($line=readdir DIR)
{
print"$line\n";
opendir DIR1,"$dir/$line"||die"error";
while($line1=readdir DIR1)
{
print"$line1\n";
}
}
closedir DIR;
closedir DIR1;
答案 0 :(得分:4)
不要这样做,而是使用File::Find
。
use strict;
use warnings;
use File::Find;
my $search = "/home/httpd/cgi-bin/r/met";
sub print_file_names {
print $_,"\n";
}
find ( \&print_file_names, $search );
答案 1 :(得分:0)
File::Find有效遍历目录列表,并为您在起始目录下递归发现的每个文件或目录执行一个子例程。在调用子例程find
(由File::Find
模块导出的函数)之前,默认情况下更改为正在扫描的目录并设置以下(全局)变量:
$File::Find::dir
- 访问了相对于起始目录的目录路径$File::Find::name
- 相对于起始目录正在访问的文件的完整路径$_
- 正在访问的文件的基本名称(在我的示例中使用)解决问题的一种方法是:
#!/usr/bin/perl
# Usage: ffind [dir1 ...]
use strict; use warnings;
use 5.010; # to be able to use say
use File::Find;
# use current working directory if no command line argument
@ARGV = qw(.) unless @ARGV;
find( sub { say if -f }, @ARGV );