如何在Perl中循环遍历目录中的文件?
可能重复:如何在Perl中循环遍历目录中的文件?,perl,file,Perl,File,可能重复: 我想循环浏览同一目录中包含的几百个文件。如何在Perl中实现这一点?您可以使用或 或者,您可以使用以下模块: 通常children()将不包括self和parent条目。和。。(或在非Unix系统上的等价物),因为这就像是我自己的事。如果确实需要所有目录条目,包括这些特殊条目,请为all参数传递一个真值: @c = $dir->children(); # Just the children @c = $dir->children(all => 1); # All
我想循环浏览同一目录中包含的几百个文件。如何在Perl中实现这一点?您可以使用或 或者,您可以使用以下模块: 通常
children()
将不包括self和parent条目。和。。(或在非Unix系统上的等价物),因为这就像是我自己的事。如果确实需要所有目录条目,包括这些特殊条目,请为all参数传递一个真值:
@c = $dir->children(); # Just the children
@c = $dir->children(all => 1); # All entries
此外,还有一个no_hidden参数将排除所有通常“隐藏”的条目-在Unix上,这意味着排除所有以点开头的条目(
):
或
返回目录中所有文件和目录的Path::Tiny
对象列表。自动排除“
和”。“
”
如果提供了可选的qr/
参数,则它仅返回与给定正则表达式匹配的子名称的对象。只有基名称用于匹配:
将目录项列表放入数组会浪费一些内存(而不是一次只获取一个文件名),但如果只有几百个文件,这不太可能成为问题
Path::Class
可移植到*nix和Windows以外的操作系统。另一方面,AFAIK的实例比Path::Tiny
实例使用更多内存
如果内存有问题,最好在循环中使用readdir
。#/usr/bin/perl-w
#!/usr/bin/perl -w
my @files = <*>;
foreach my $file (@files) {
print $file . "\n";
}
我的@files=;
foreach my$文件(@files){
打印$file。“\n”;
}
在哪里
@files=;
可能是
@files = </var/www/htdocs/*>;
@files = </var/www/htdocs/*.html>;
@files=;
@文件=;
等等。享受
opendir(DH, "directory");
my @files = readdir(DH);
closedir(DH);
foreach my $file (@files)
{
# skip . and ..
next if($file =~ /^\.$/);
next if($file =~ /^\.\.$/);
# $file is the file used on this iteration of the loop
}
这个问题不是这个问题的翻版吗@莱昂纳多·赫雷拉的确如此。对不起,我不记得那个了。投票结束。我不认为这是重复的。问题是如何循环浏览目录中的文件。标记的“复制”询问如何列出目录中的所有文件。显然不同。为什么标记为重复?reead_dir会删除。和。。对于您,如果需要,可以将目录前缀添加到文件名中。谢谢!如果($file=~/^.+$/),我将使用next代码>但是,为了避免第二条语句;)@ashraf regex必须是/^\.+$/而不是/^.+$/@Rauf是的,我想你是对的!:)这不会列出GNU/Linux和其他类似操作系统上的隐藏文件(以点开头的文件)。
#!/usr/bin/perl -w
my @files = <*>;
foreach my $file (@files) {
print $file . "\n";
}
@files = <*>;
@files = </var/www/htdocs/*>;
@files = </var/www/htdocs/*.html>;
opendir(DH, "directory");
my @files = readdir(DH);
closedir(DH);
foreach my $file (@files)
{
# skip . and ..
next if($file =~ /^\.$/);
next if($file =~ /^\.\.$/);
# $file is the file used on this iteration of the loop
}