如何使用find查找子目录

时间:2018-11-19 17:37:11

标签: bash shell perl csh tcsh

我正在使用以下命令在perl代码的数组@handoff中获取子目录。

chomp(@handoff = `find * -maxdepth 0 -type d -name "18????_????" | sort -u | tail -2`);

我收到错误消息

find: unknown predicate `-lrt'

如果直接在终端中尝试相同的命令,则可以获取子目录。请给我建议一些解决方案。

2 个答案:

答案 0 :(得分:2)

无需调用外部程序来查找子目录:

opendir(my $dh, '.') || die "Can't opendir '.': $!";
my @handoff = grep { /^18.{4}_.{4}$/ && -d $_ } readdir($dh);
closedir $dh;
print join(' ', @handoff), "\n"

答案 1 :(得分:0)

find希望将搜索路径作为第一个参数,因此:

    find * -maxdepth 0 -type d -name "18????_????" | sort -u | tail -2

应为:

    find . -maxdepth 1 -type d -name "18????_????" | sort -u | tail -2

(假设您要搜索当前路径-否则将.替换为要搜索的路径)。

但是最重要的是,正如您已经在使用perl一样,为什么要使用诸如find之类的外部命令?

这是使用模块Path::Iterator::Rule的另一种解决方案。

use Path::Iterator::Rule;
my @handoffs = Path::Iterator::Rule
    ->new
    ->directory             # only directories (not files)
    ->max_depth(1)          # do not recurse
    ->name("18????_????")   # match directory name (glob or regex)
    ->all(".")              # search the current path
;