FTP Рекурсивный ... как пропустить его, если у меня уже есть файл? - PullRequest
1 голос
/ 31 марта 2011

Я использую Net :: FTP :: Recursive для ежедневной загрузки всех файлов с моего сервера на локальный хост. Есть ли способ проверить наличие файла на локальном хосте б / ф? Я все скачиваю? Я хочу пропустить уже загруженные файлы.

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 ]

4 голосов
/ 31 марта 2011

Метод rget в Net::FTP::Recursive принимает аргумент ParseSub => sub { ... }, который решает, какие файлы на удаленном сервере следует извлечь.

Взгляните на метод parse_files в исходном коде - это функция по умолчанию, которую использует rget - и посмотрите, как вы можете использовать ее модифицированную версию для исключения файлов которые уже существуют на вашем локальном хосте.

2 голосов
/ 31 марта 2011

Что вы можете сделать, прежде чем инициализировать ваше FTP-соединение, получить список файлов, которые находятся на вашем локальном компьютере.Затем объедините их в регулярное выражение и используйте свойство OmitFiles, равное rget, чтобы пропустить файлы на локальном компьютере.

Конечно, это не относится к случаю, когда файл был измененна удаленной машине, и у вас нет этой модификации.Или случай, когда ваш перевод был прерван и у вас есть только половина файла.

Возможно, вам следует подумать об использовании rsync вместо этого, будь то программа командной строки или модуль File::Rsync.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...