我正在编写一个Perl脚本来自动从文件夹中复制PDF。
用户无法访问他们没有权限的文件夹,因此他们不会意外地获取他们不应该访问的任何信息。
我有一个粗略的模型,除了一个错误之外有效:它会一直看到.
和..
文件夹并打开它们进入无限循环。
检查以下条件语句以查看该文件是PDF,然后将其传递给我的copyPDF
,它检查异常然后复制文件;如果文件夹扫描该内容并重复,它会通过并尝试打开文件夹。
我尝试了多种方法来忽略.
和..
,但它总是导致忽略所有其他子文件夹。有人有工作吗?
if ($file =~ /\.pdf$/i) {
print "$file is a pdf\n";
$fileLocation = "$directoryName/$file";
copyPDF("$fileLocation", "$file");
}
elsif ($file == '.') {
#print "argh\n";
}
else {
$openFolder = "$directory/$file";
print "*$openFolder";
openNextDirectory("$openFolder");
}
答案 0 :(得分:4)
始终使用use strict; use warnings;
!!!
$file == '.'
产生
Argument "." isn't numeric in numeric eq (==)
因为您要求Perl比较两个数字。你应该使用
$file eq '.'
有关perl运营商的详细信息,请参阅perldoc perlop
。
答案 1 :(得分:2)
这个老问题有一些很好的答案可以解决这个问题和类似的问题:
How can I copy a directory recursively and filter filenames in Perl?
答案 2 :(得分:-3)
使用File::Find
模块
use File::Find;
use File::Copy;
my $directory = 'c:\my\pdf\directory';
find(\&pdfcopy, $directory);
sub pdfcopy() {
my $newdirectory = 'c:\some\new\dir';
return if ($File::Find::name !~ /\.pdf$/i);
copy($File::Find::name, $newdirectory) or
die "File $File::Find::name cannot be copied: !";
}