【问题标题】:Perl: How to glob all and only subdirectories?Perl:如何全局化所有子目录?
【发布时间】:2011-09-11 18:59:19
【问题描述】:

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

... ".*" 导致 "."和“..”也被返回,这会弄乱我的函数,因为它会导致无限循环。如何获取 $dir 的子文件夹,包括常规和隐藏的,不是当前或上级目录?

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

你好
.hiddendir
“名称中有空格的目录”
“.hidden 目录,名称中有空格”
目录2

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

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

谢谢

【问题讨论】:

  • 那么说if (-d $dir && $dir ne '.' && $dir ne '..') { ...有什么问题?

标签: perl directory hidden traversal glob


【解决方案1】:
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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      File::Slurp 中的read_dir 函数默认自动排除...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 2011-11-09
        • 2010-12-31
        • 1970-01-01
        相关资源
        最近更新 更多