Perl正则表达式循环遍历所有目录并获取特定文件

Perl正则表达式循环遍历所有目录并获取特定文件,perl,unix,Perl,Unix,我想将unix正则表达式翻译成Perl语言,以获得与某些条件相关联的特定文件 假设现在我在目录/nfs/cs/test\u case/y2016call totalResult.pl中有一个Perl脚本,这个目录还包含很多目录,比如testWeek1、testWeek2、testWeek3……等等。每个目录都包含子目录,如testCase1、testCase2、testCase3…等。每个testCase目录都包含一个文件call.test\u result,其中包含成功或失败的结果记录 因此,

我想将unix正则表达式翻译成Perl语言,以获得与某些条件相关联的特定文件

假设现在我在目录
/nfs/cs/test\u case/y2016
call totalResult.pl中有一个Perl脚本,这个目录还包含很多目录,比如testWeek1、testWeek2、testWeek3……等等。每个目录都包含子目录,如testCase1、testCase2、testCase3…等。每个testCase目录都包含一个文件call.test\u result,其中包含成功或失败的结果记录

因此,我可以使用unix命令获取文件信息,例如:

wc /nfs/cs/test_case/y2016/testWeek1/testCase1/.test_result
如果要获取失败的每个目录和子目录的测试结果,我可以从unix中的当前路径
/nfs/cs/test\u case/y2016
执行,如:

grep -ri "fail" */*/.test_result
它将给我输出:

/nfs/cs/test_case/y2016/testWeek1/testCase1/.test_result:fail
/nfs/cs/test_case/y2016/testWeek3/testCase45/.test_result:fail
/nfs/cs/test_case/y2016/testWeek4/testCase12/.test_result:fail
.
.
...etc
我如何在编写Perl脚本时实现它?只要运行命令
Perl testCase.pl
,就可以获得相同的输出?我是unix和Perl新手,任何人都可以帮助我收集所有测试文件的名称
# Collect names of all test files
my @TestFiles = glob('/nfs/cs/test_case/y2016/*/*/.test_result');
# Check test files for "fail"
foreach my $TestFile ( @TestFiles ) {
  open(my $T,'<',$TestFile) or die "Can't open < $TestFile: $!";
  while(<$T>){
    if( /fail/ ) {
       chomp;
       print $TestFile,":",$_,"\n";
    }
  }
  close($T);
}
my@TestFiles=glob('/nfs/cs/test_case/y2016/*/*/.test_result'); #检查测试文件是否“失败” foreach my$TestFile(@TestFiles){
open(my$T,“您还可以使用back tick(`)操作符在Perl中执行相同的linux命令

@结果=`grep-ri“fail”*/*/.test_result`


print@result;

谢谢您的帮助,这是工作,请问glob和chomp有什么用?glob使用*作为通配符从模式中提取文件(制作文件列表)。chomp从行尾删除换行符(如果有,现在什么都不做)。我使用chomp处理/打印以“\n”结尾的行的方式相同最后一行可能没有“\n”。