我没有看到find2perl
文档提到任何关于支持-mindepth
和-maxdepth
论点的内容。
下面的示例适用于find
:
$ find2perl . -mindepth 2 -maxdepth 2 -name "*txt" -type f
Unrecognized switch: -mindepth
问题:
- 是否
find2perl
支持这样的功能? - 如果是这样,我该如何指定
mindepth
和maxdepth
?
File::Find::Rule有这些选项,它有一个命令行程序findrule。
如果你想用 File::Find 来做,你可以通过检查文件的深度和设置深度来实现 maxdepth $File::Find::prune
。mindepth 是类似的,但是你会提前从你的函数中返回。今天早上我感觉很懒,所以我会把编码留给其他人。
更新:其他人进行了编程,即 File::Find::Rule。 这是他们使用的代码。
my $maxdepth = 2;
my $mindepth = 2;
my $topdir = "something/something/something";
sub wanted {
# figure out the relative path and depth
my $relpath = $File::Find::name;
$relpath =~ s{^\Q$topdir\E/?}{};
my $depth = File::Spec->splitdir($relpath);
defined $maxdepth && $depth >= $maxdepth
and $File::Find::prune = 1;
defined $mindepth && $depth < $mindepth
and return;
...your code goes here...
}
find \&wanted, $topdir;
我只是查看了 find2perl 和 File::Find 的源代码,它是 find2perl 使用的目录遍历器。目前既没有实现 mindepth 也没有实现 maxdepth。
File::Find 在遍历目录时显示轨道深度,在一个名为 $CdLvl 的变量中。您可以通过与 $CdLvl 进行比较来实现 mindepth 和 maxdepth。