我正在使用以下命令在perl代码的数组@handoff中获取子目录。
chomp(@handoff = `find * -maxdepth 0 -type d -name "18????_????" | sort -u | tail -2`);
我收到错误消息
find: unknown predicate `-lrt'
如果直接在终端中尝试相同的命令,则可以获取子目录。请给我建议一些解决方案。
答案 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
;