2012-12-17 210 views
2

我正在編寫一個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

顯示我們爲您的文件發現的所有代碼。你在使用File :: Find嗎?向我們展示所有這些。 –

+1

雖然我們在這,但[不要引用'「$ vars」'](http://perldoc.perl.org/perlfaq4.html#What%27s-wrong-with-always-quoting-%22$瓦爾斯%22?)沒有理由。 – melpomene

+1

'next如果$ file =〜/^\.\.?$/'是解決這個問題的常用方法。 – TLP

回答

4

始終使用use strict; use warnings; !!!

$file == '.' 

產生

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

,因爲你問的Perl比較兩個數字。您應該使用

$file eq '.' 

有關perl運營商的更多信息,請參閱perldoc perlop

-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: !"; 
} 
+2

缺少'使用警告;使用嚴格;',你的代碼甚至不解析,無用的錯誤原型使用,你的正則表達式是錯誤的,你拼錯'!!'。 – melpomene

+0

@melpomene嗯......解決方案有效。正則表達式是正確的。掌握... – David

+0

正則表達式(大部分)是正確的,但只有自第二次編輯以來。你修正瞭解析錯誤和正則表達式,但沒有解決其他3個問題。 – melpomene

相關問題