Perl:如何全局访问所有且仅子目录?
我正在尝试编写一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
或
File::Find::Rule
or
File::Find::Rule
只需使用 grep 来过滤掉 .和..目录:
Just use grep to filter out the . and .. directories:
File::Slurp 中的
read_dir
函数自动排除默认情况下,.
和..
。The
read_dir
function in File::Slurp automatically excludes.
and..
, by default.