我面临两个问题。
1)我正在为某些关键字搜索目录,并且该目录包含具有许多扩展名的文件,例如 .java .sql .ksh .pl .jar 等。现在我的问题是我不想搜索具有 .jar 或 .doc 或 .docx 的文件。目前我的代码如下所示
use strict;
use warnings;
use File::find;
my $dir = "C:\DURAB\";
my $out = "output.txt";
open my $out, ">", "output.txt";
find(\&printFile,$dir);
sub printFile {
my $element = $_;
if(-f $element && $element =~ /\.*$/){
open my $in, "<", $element or die $!;
while(<$in>) {
if (/\Q$searchString\E/) {
my $last_update_time = (stat($element))[9];
my $timestamp = localtime($last_update_time);
print $out "$File::Find::name". " $timestamp". " $searchString\n";
last;
}
}
}
}
在此它正在搜索所有文件,现在我想限制搜索,以便无需搜索 .jar、.exe 、.doc 类型的扩展名。
2)在搜索目录时,我有很多子目录。我不想在名称已过时或已退休的目录中搜索(例如 obsolete_dr 、 denied_as )我如何使用 file::find 来实现这一点
我想我有点困惑实际上下面是我需要的输出
从上面的代码 $file::find::name 显示文件路径,如果此文件路径包含过时或退役,则不应显示该输出。
例如,我得到了类似的路径
c:\DURAB\ASD\OBSOLETE_EC23\sirgu.sql and c:\DURAB\AS\drive.ksh
不应显示上述第一个路径,因为它的单词已过时。
我想现在我很清楚了。提前致谢