私は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
アクションをオンにfind
して-0
フラグをオンにすると、これを回避できますxargs
。
find . -type f -print0 | xargs -0 -l "2000.*Created" | cut -c3-100