2011-03-31 70 views
1

我正在使用Net::FTP::Recursive將我服務器上的所有文件每天下載到本地主機。有沒有辦法檢查本地主機上的文件存在b/f我下載了一切?我想跳過我已經下載的文件。FTP遞歸...如果我已經有文件,如何跳過它?

my $host = "host"; my $user = "u"; my $password = "p"; 
my$f = Net::FTP::Recursive->new($host, Debug => 0, Passive => 0); 
    $f->login($user,$password); 
    $f->rget();  
    $f->quit; 

回答

2

您可以做的是,在初始化FTP連接之前,獲取本地計算機上的文件列表。然後將它們一起放入正則表達式中,並使用rgetOmitFiles屬性省略本地計算機上的文件。

當然,這並不處理在遠程計算機上修改了文件但沒有修改的情況。或者您的傳輸被中斷並且您只有一半文件的情況。

您應該考慮使用rsync來代替,無論是使用命令行程序還是File::Rsync module

4

Net::FTP::Recursiverget方法接受ParseSub => sub { ... }論點,即決定哪個所述遠程服務器上的文件應該被檢索。

看看在parse_files方法the source code - 那就是rget使用默認的功能 - 看你如何使用它的修改版本,以排除已經在你的本地主機上存在的文件。

+0

謝謝。他們似乎沒有任何東西可以檢查文件是否存在於本地主機上......它只是在遠程主機上執行正則表達式 – 2011-03-31 19:18:53

+0

正確的是,您必須實現自己的'my_parse_files'例程來檢查您的本地主機的文件。 – mob 2011-03-31 19:55:05

相關問題