Perl中是否有一个列出目录中所有文件和目录的函数?我记得Java有File.list()这个吗?在Perl中是否有类似的方法?
小智 84
如果你想获得给定目录的内容,只有它(即没有子目录),最好的方法是使用opendir/readdir/closedir:
opendir my $dir, "/some/path" or die "Cannot open directory: $!";
my @files = readdir $dir;
closedir $dir;
Run Code Online (Sandbox Code Playgroud)
您还可以使用:
my @files = glob( $dir . '/*' );
Run Code Online (Sandbox Code Playgroud)
但在我看来它并不是那么好 - 主要是因为glob是非常复杂的东西(可以自动过滤结果)并使用它来获取目录的所有元素似乎是一个太简单的任务.
另一方面,如果您需要从所有目录和子目录获取内容,基本上有一个标准解决方案:
use File::Find;
my @content;
find( \&wanted, '/some/path');
do_something_with( @content );
exit;
sub wanted {
push @content, $File::Find::name;
return;
}
Run Code Online (Sandbox Code Playgroud)
Vin*_*vic 13
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;
Run Code Online (Sandbox Code Playgroud)
Mat*_*nes 11
这应该做到这一点.
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";
}
}
Run Code Online (Sandbox Code Playgroud)
Tod*_*ner 11
use File::Find;
finddepth(\&wanted, '/some/path/to/dir');
sub wanted { print };
Run Code Online (Sandbox Code Playgroud)
如果子目录存在,它将通过子目录.
如果你像我一样懒惰,你可能喜欢使用File::Slurp模块。read_dir 函数会将目录内容读入数组,删除点,并在需要时为绝对路径的 dir 返回的文件添加前缀
my @paths = read_dir( '/path/to/dir', prefix => 1 ) ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108863 次 |
| 最近记录: |