2

我正在编写一个 Perl 脚本来自动从文件夹中复制 PDF。

用户无法访问他们无权访问的文件夹,因此他们不会意外地访问他们不应该访问的任何信息。

我有一个粗略的模型,除了一个错误外,它可以工作:它一直看到.and..文件夹并打开它们进入无限循环。

检查文件的以下条件语句是 PDF,然后将传递给 my copyPDF,后者检查异常然后复制文件;否则,如果文件夹扫描该内容并重复,它会通过并尝试作为文件夹打开。

我尝试了多种方法来忽略.and.. 但它总是导致忽略所有其他子文件夹。有人有工作吗?

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");
}
4

3 回答 3

4

一直用use strict; use warnings;!!!

$file == '.'

生产

Argument "." isn't numeric in numeric eq (==)

因为您要求 Perl 比较两个数字。你应该使用

$file eq '.'

perldoc perlop有关 perl 运算符的更多信息,请参阅 参考资料。

于 2012-12-17T21:57:55.907 回答
2

这个老问题有一些很好的答案可以解决这个问题和类似问题:

如何递归复制目录并在 Perl 中过滤文件名?

于 2012-12-17T22:15:17.340 回答
-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: !";
}
于 2012-12-17T22:09:17.113 回答