Perl:如何全局访问所有且仅子目录?

发布于 2024-12-03 22:11:07 字数 469 浏览 0 评论 0原文

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

<$dir/* $dir/.*>

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

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

hello
.hiddendir
“名称中带有空格的目录”
“.hidden 目录,名称中带有空格”
dir2

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

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

谢谢

I am trying to write a Perl script that does a preorder directory traversal. I need it to get all subdirectories of a given directory including the hidden ones. Unfortunately when I try to glob this way:

<$dir/* $dir/.*>

... the ".*" causes "." and ".." to be returned too, and this messes up my function because it causes an infinite loop. How do I get only the subfolders of $dir, both regular and hidden, and not the current or upper-level directory?

For example if my folder is "dir" and it contains these subdirectories:

hello
.hiddendir
"dir with space in name"
".hidden dir with space in name"
dir2

... I want to get an array with just these and not "." or "..".

I don't care if files show up too because I use "if (-d $dir)" later. Is there a way I can test whether an element of the globbed array is equal to the current directory or the parent directory so I can exclude them?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

萤火眠眠 2024-12-10 22:11:07
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

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

or

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

File::Find::Rule

゛清羽墨安 2024-12-10 22:11:07

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

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

Just use grep to filter out the . and .. directories:

grep { !/^\.{1,2}$/ } <$dir/* $dir/.*>
新人笑 2024-12-10 22:11:07

File::Slurp 中的 read_dir 函数自动排除默认情况下,...

The read_dir function in File::Slurp automatically excludes . and .., by default.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文