如何列出目录中的所有文件

时间:2015-04-02 08:45:19

标签: perl

如何列出多个目录的父目录和子目录中的所有文件?

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

2 个答案:

答案 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 );