Webページからtarballをアップロードし、それを/ tmp /にドロップしてから、このスクリプト(crontabを介して呼び出されます)に次のように要求します。
1.)それを抽出する
2.)ディレクトリ内のすべてのファイル(ファイルのみおよび再帰的)のリストを作成します
3.)各ファイルで文字列を検索し、そのファイル名と一致する文字列の行をファイルに出力します。
(抽出されたtarball)ディレクトリにファイルのリストを作成したい部分まですべてが機能しています。「!」を入れないと 私のコードの6行目の正規表現の前(.bak、.conf、.cfgであるファイルのみに一致)では、@ filelistに12個のファイルしかありません(予想どおり、行のコードによって印刷されます) 13)。
ただし、「!」を付けると 6行目の正規表現の前(これらのファイル以外のすべてに一致することを目的としています)の13行目では、拡張子が.bak、.conf、および.cfgのファイルを含むすべてのファイル名が出力されます。
気にしないファイル名を除いて、(抽出されたtarball)ディレクトリにあるファイル名のコレクションを取得するにはどうすればよいですか?
これは私のコードです。大まかに(削除され、テストされていません)。私はperlの初心者なので、ここにあるものの醜さをお詫びしますが、それはそれです。
1 sub loadFiles {
2 my $dir=shift;
3 find(\&recurDir,"$dir");
4 }
5 sub recurDir {
6 if ( $File::Find::name =~ /(\.bak|\.conf|\.cfg)$/i ) {
7 push @filelist, $File::Find::name;
8 }
9 print "$File::Find::name\n";
10 }
11 sub searcher {
12 my $file=$_;
13 print "Searching $file\n";
14 }
15 my $tarball = '/tmp/mytarball.tar.gz';
16 my $ae = Archive::Extract->new( archive=>$tarball ) || die ("$!");
17 $ae->extract( to=>$UPLOAD_DIR ) || die ("$ae->error");
18 my $dir_loc = File::Spec->catfile( $UPLOAD_DIR, $ae->files->[0]);
19 loadFiles("$dir_loc");
20 find(\&searcher, @filelist);