如何列出所有的文件在用Perl目录? [重复](How can I list all of th

2019-06-24 04:31发布

这个问题已经在这里有一个答案:

  • 我如何在Perl目录的内容读? 8个回答

有Perl中的功能,列出一个目录下的所有文件和目录? 我记得Java有File.list()来做到这一点? 有没有在Perl类似的方法?

Answer 1:

如果你想获得给定目录的内容,只有它(即无子目录),最好的办法是使用执行opendir / readdir的/ closedir:

opendir my $dir, "/some/path" or die "Cannot open directory: $!";
my @files = readdir $dir;
closedir $dir;

你也可以使用:

my @files = glob( $dir . '/*' );

但在我看来,它也没有那么好 - 主要是因为水珠是相当复杂的东西(可以自动过滤结果),并用它来获取目录中的所有元素似乎太简单的任务。

在另一方面,如果你需要从所有的目录和子目录的获取内容,基本上一个标准溶液:

use File::Find;

my @content;
find( \&wanted, '/some/path');
do_something_with( @content );

exit;

sub wanted {
  push @content, $File::Find::name;
  return;
}


Answer 2:

READDIR()做到这一点。

检查http://perldoc.perl.org/functions/readdir.html

opendir(DIR, $some_dir) || die "can't opendir $some_dir: $!";
@dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
closedir DIR;


Answer 3:

或文件::查找

use File::Find;
finddepth(\&wanted, '/some/path/to/dir');
sub wanted { print };

如果存在的话,它会经历子目录。



Answer 4:

这应该这样做。

my $dir = "bla/bla/upload";
opendir DIR,$dir;
my @dir = readdir(DIR);
close DIR;
foreach(@dir){
    if (-f $dir . "/" . $_ ){
        print $_,"   : file\n";
    }elsif(-d $dir . "/" . $_){
        print $_,"   : folder\n";
    }else{
        print $_,"   : other\n";
    }
}


Answer 5:

如果你是像我这样的懒人,你可能会喜欢使用文件:: Slurp的模块。 该read_dir函数将读取目录内容到一个数组,消除了点,如果需要前缀的文件与目录的绝对路径返回

my @paths = read_dir( '/path/to/dir', prefix => 1 ) ;


Answer 6:

这将列出从指定的目录,一切(包括子目录),以便,并与属性。 我花了几天寻找的东西要做到这一点,我拿了份从此整个讨论,和一点点我自己的,并把它在一起。 请享用!!

#!/usr/bin/perl --
print qq~Content-type: text/html\n\n~;
print qq~<font face="arial" size="2">~;

use File::Find;

# find( \&wanted_tom, '/home/thomas/public_html'); # if you want just one website, uncomment this, and comment out the next line
find( \&wanted_tom, '/home');
exit;

sub wanted_tom {
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat ($_);
$mode = (stat($_))[2];
$mode = substr(sprintf("%03lo", $mode), -3);

if (-d $File::Find::name) {
print "<br><b>--DIR $File::Find::name --ATTR:$mode</b><br>";
 } else {
print "$File::Find::name --ATTR:$mode<br>";
 }
  return;
}


文章来源: How can I list all of the files in a directory with Perl? [duplicate]