在网络驱动器上搜索文件中的字符串的最佳方法

时间:2012-10-10 16:20:45

标签: windows perl vbscript

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

这可能吗?我一直在阅读多本Perl书籍,希望找到一条线索,或者让我朝着正确的方向前进,并且运气不好。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
}