这是我的问题:我们有一个文件服务器(Windows 2003),人们不断在其中放置包含PII的表单。现在的政策是,我们的文件服务器上的任何表单都不再允许一个人的SSN的最后4个。我正在尝试找出一个脚本来扫描文档中的字符串,例如“SSN”或“Last Four”,我所能找到的是有关如何在本地计算机上搜索文本文件的说明/示例。我见过很多与此类似的线程,但主要是在本地文件夹中搜索txt文件。我已经看到powershell脚本执行此操作但(不要问为什么)在我们的服务器上禁用了powershell脚本。
这可能吗?我一直在阅读多本Perl书籍,希望找到一条线索,或者让我朝着正确的方向前进,并且运气不好。
答案 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;
}