Perl:如何全部和只有子目录?

时间:2011-09-11 18:59:19

标签: perl directory hidden traversal glob

我正在尝试编写一个执行预订序目录遍历的Perl脚本。我需要它来获取给定目录的所有子目录,包括隐藏的目录。不幸的是,当我尝试用这种方式表达时:

< $ dir / * $ dir /.*>

...“。*”导致“。”并且“......”也要返回,这会弄乱我的功能,因为它会导致无限循环。如何 $ dir的子文件夹,包括常规和隐藏,当前或上级目录?

例如,如果我的文件夹是“dir”并且它包含这些子目录:

您好
.hiddendir
“名称中有空格的目录”
“。隐藏的dir,名称中有空格”
DIR2

...我想得到一个只有这些而不是“。”的数组。或“......”。

我不关心文件是否也显示,因为我之后使用“if(-d $ dir)”。有没有办法可以测试globbed数组的元素是否等于当前目录或父目录,以便我可以排除它们?

由于

3 个答案:

答案 0 :(得分:4)

perl -MFile::Find::Rule -E'
   say
      for
         File::Find::Rule->directory->in(".");'

perl -MFile::Find::Rule -E'
   say
      for
          grep $_ ne ".",
             File::Find::Rule->directory->in(".");'

File::Find::Rule

答案 1 :(得分:1)

只需使用grep过滤掉。和..目录:

grep { !/^\.{1,2}$/ } <$dir/* $dir/.*>

答案 2 :(得分:1)

默认情况下,File::Slurp中的read_dir功能会自动排除...