1

这是我的问题:我们有一个文件服务器(Windows 2003),人们一直在上面放置包含 PII 的表单。现在的政策是,我们文件服务器上的任何表格都不再允许使用个人 SSN 的最后 4 个。我正在尝试找出一个脚本来扫描文档中的“SSN”或“最后四个”等字符串,而我所能找到的只是有关如何在本地计算机上搜索文本文件的说明/示例。我见过很多与此类似的线程,但主要是在本地文件夹中搜索 txt 文件。我见过执行此操作的 powershell 脚本,但是(不要问为什么)我们的服务器上禁用了 powershell 脚本。

这可能吗?我一直在大量阅读多本 Perl 书籍,以希望获得线索或让我朝着正确的方向前进,但运气却是 0。

4

2 回答 2

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 回答
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 回答