我正在尝试编写一个执行预订序目录遍历的Perl脚本。我需要它来获取给定目录的所有子目录,包括隐藏的目录。不幸的是,当我尝试用这种方式表达时:
< $ dir / * $ dir /.*>
...“。*”导致“。”并且“......”也要返回,这会弄乱我的功能,因为它会导致无限循环。如何仅 $ dir的子文件夹,包括常规和隐藏,不当前或上级目录?
例如,如果我的文件夹是“dir”并且它包含这些子目录:
您好
.hiddendir
“名称中有空格的目录”
“。隐藏的dir,名称中有空格”
DIR2
...我想得到一个只有这些而不是“。”的数组。或“......”。
我不关心文件是否也显示,因为我之后使用“if(-d $ dir)”。有没有办法可以测试globbed数组的元素是否等于当前目录或父目录,以便我可以排除它们?
由于
答案 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(".");'
答案 1 :(得分:1)
只需使用grep过滤掉。和..目录:
grep { !/^\.{1,2}$/ } <$dir/* $dir/.*>
答案 2 :(得分:1)
默认情况下,File::Slurp中的read_dir
功能会自动排除.
和..
。