1

私の問題は次のとおりです。私たちのファイル サーバー (Windows 2003) には、PII を含むフォームが置かれています。ポリシーにより、個人の SSN の最後の 4 つは、ファイル サーバー上のどのフォームでも許可されなくなりました。ドキュメント内の "SSN" や "Last Four" などの文字列をスキャンするスクリプトを見つけようとしていますが、ローカル マシンでテキスト ファイルを検索する方法の説明や例しか見つかりません。これに似た多くのスレッドを見てきましたが、主にローカル フォルダー内の txt ファイルを検索しています。これを行う PowerShell スクリプトを見たことがありますが (理由は聞かないでください)、当社のサーバーでは PowerShell スクリプトが無効になっています。

これは可能ですか?手がかりを期待したり、正しい方向に導いたりするために、複数のPerlの本をよく読んでいますが、運がありませんでした。

4

2 に答える 2

1

最終的にファイルにアクセスできると仮定して、ファイルのディレクトリを検索し、一致する文字列を探す方法を次に示します。

use strict;
use warnings;
use File::Find;

our $CHECK_FILE_EXTENSION = qr/.txt$/;
File::Find::find({wanted=>\&find_ssn, no_chdir=>1},$_) for @ARGV;
exit;

sub find_ssn
{
    ## File::Find sets $File::Find::name with full path to file, which is the correct path to an 'open' call when 'no_chdir' is used
    return unless $File::Find::name =~ $CHECK_FILE_EXTENSION;
    open F,$File::Find::name || die "Can't read file, $File::Find::name, $!\n";
    while(<F>)
    {
        if(/SSN/)
        {   
           ## file as 'SSN' in it, do your work here
        }
    }
    close F;
}
于 2012-10-10T17:53:03.157 に答える
1

I/O 速度を除けば、ファイルへのリモート アクセスとローカル アクセスに実質的な違いはありません。それは単なるファイル記述子です。

C:\>perl -MFile::Slurp -E "my $dir = q|//SERVER/Share/Test|; for my $file (read_dir($dir)) { say qq|$file: |, (read_file(qq|$dir/$file|) =~ /foo/) ? q|match| : q|not match| }"
bar.txt: not match
foo.txt: match
于 2012-10-10T17:47:34.760 に答える