#!/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
}
next if ($file =~ /^.+$/);
,这样就避免了第二个语句的出现 ;)。 - ashraf通常情况下,
children()
不会包含当前目录和上级目录中的 . 和 ..(或非Unix系统中对应的条目),因为这就像是我自己的爷爷的生意。如果你想要包含这些特殊条目的所有目录条目,请将 all 参数设置为 true 值:
@c = $dir->children(); # Just the children @c = $dir->children(all => 1); # All entries
此外,还有一个no_hidden参数,它将排除所有通常“隐藏”的条目 - 在Unix上,这意味着排除所有以点(
.
)开头的条目:
@c = $dir->children(no_hidden => 1); # Just normally-visible entries
或者,Path::Tiny:
返回一个列表,其中包含目录中所有文件和子目录的@paths = path("/tmp")->children; @paths = path("/tmp")->children( qr/\.txt$/ );
Path::Tiny
对象。自动排除"."
和".."
。
如果提供了可选的qr//
参数,则仅返回与给定正则表达式匹配的子名称对象。只使用基本名称进行匹配。将目录条目列表获取到数组中会浪费一些内存(相对于逐个获取文件名),但是仅有几百个文件的情况下,这不太可能成为问题。@paths = path("/tmp")->children( qr/^foo/ ); # matches children like the glob foo*
Path::Class可在*nix和Windows以外的操作系统上使用。另一方面,据我所知,它的实例使用的内存比Path::Tiny实例多。
如果内存是一个问题,最好在while循环中使用readdir。