我更喜欢 File::Find 这个例子——它更便携,而且 File::Find 可以做一些非常漂亮的事情。但是,我将提到一种方法,它可以在没有内置支持的情况下对其他命令有用。
open F,'find . -type f | xargs grep -l "2000.*Created" | cut -c3-100 |' || die 'cannot execute';
while(<F>) { chomp ; push(@a,$_)}
注意打开的尾随管道 ( |
) ... 这很重要,因为 Perl 会自动为您完成所有连接管道的工作。
这也可以使用较新的 3 参数 open 来编写:
open my $fh, '-|', 'find . -type f | xargs grep -l "2000.*Created" | cut -c3-100' || die 'cannot execute';
while(<$fh>) { chomp ; push(@a,$_)}
作为旁注,find | xargs
如果您的文件名带有空格,将会遇到一些问题。您可以通过-print0
操作 onfind
和-0
标记 on来解决这个问题xargs
:
find . -type f -print0 | xargs -0 -l "2000.*Created" | cut -c3-100