Мне нужно загрузить 10 000 zip-файлов с FTP-клиента, на котором хранится около 40 000 элементов. Я обдумывал делать:

$ cat > files.txt
file1
file2
file3
file4

с

$ wget -i files.txt

Есть ли лучшее решение для такой большой суммы на случай, если у меня выйдет тайм-аут?

3 ответа3

2

Решение хорошее и достаточно надежное: при правильных настройках wget повторить попытку и загрузить любой файл, передача которого была прервана.

Однако вы также можете создавать сценарии для большинства FTP-клиентов командной строки (например, BSD-клиент ftp). Но wget лучше в том смысле , что вы можете настроить его так, чтобы он не загружал файлы, которые у вас уже есть, что делает его очень удобным для синхронизации.

wget поддерживает (по крайней мере, в Linux) ограничение скорости, и довольно просто распределить список файлов по нескольким файлам, чтобы загружать их параллельно, или вы можете использовать GNU параллельно.

1

wget хорош и компетентен и, вероятно, будет хорошо работать в этом случае, как указано в ответе Изерни, если вы покопаетесь в руководстве по поводу доступных опций. Я просто изложу некоторые альтернативы.

Я использую LFTP для передачи и синхронизации по FTP и SFTP. Он имеет внутреннюю систему очередей, которая хорошо работает для моего случая использования, поддерживает зеркалирование, обратное зеркалирование, FXP, все обычные функции FTP и многое другое (даже Bittorrent в настоящее время).

В этом случае достаточно просто использовать скрипт и wget , но я хотел бы упомянуть программу, которая значительно упростила для меня передачу по FTP.

Я также использовал NcFTP, который имеет очень хорошую пакетную систему, но преградой для меня в пользу LFTP было то, что он поддерживал как FTP, так и SFTP.

Другой альтернативой является rsync который также поддерживает FTP, и, возможно, вы уже привыкли к этому. У этого также есть довольно продвинутые опции, готовые согласно фильтрации и возобновлению прерванных загрузок.

Преимущество "настоящего" FTP-клиента по сравнению с пакетным использованием wget заключается в том, что одно соединение с сервером можно использовать повторно, что может повысить производительность. Я не уверен, что есть такая альтернатива для wget , но, возможно, есть. Если это действительно одноразовая операция, вы можете использовать более или менее все что угодно.

0

LFTP довольно хорош в этом. Обратите внимание на символы продолжения и расширения OPTS .

lftp :~> help mirror
Usage: mirror [OPTS] [remote [local]]
Mirror specified remote directory to local directory

-c, --continue continue a mirror job if possible -e, --delete delete files not present at remote site --delete-first delete old files before transferring new ones -s, --allow-suid set suid/sgid bits according to remote site --allow-chown try to set owner and group on files --ignore-time ignore time when deciding whether to download -n, --only-newer download only newer files (-c won't work) -r, --no-recursion don't go to subdirectories -p, --no-perms don't set file permissions --no-umask don't apply umask to file modes -R, --reverse reverse mirror (put files) -L, --dereference download symbolic links as files -N, --newer-than=SPEC download only files newer than specified time -P, --parallel[=N] download N files in parallel -i RX, --include RX include matching files -x RX, --exclude RX exclude matching files RX is extended regular expression -v, --verbose[=N] verbose operation --log=FILE write lftp commands being executed to FILE --script=FILE write lftp commands to FILE, but don't execute them --just-print, --dry-run same as --script=-

When using -R, the first directory is local and the second is remote. If the second directory is omitted, basename of first directory is used. If both directories are omitted, current local and remote directories are used.

lftp :~> help mget
Usage: mget [OPTS] 
Gets selected files with expanded wildcards
 -c  continue, reget
 -d  create directories the same as in file names and get the
     files into them instead of current directory
 -E  delete remote files after successful transfer
 -a  use ascii mode (binary is the default)
 -O  specifies base directory or URL where files should be placed

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .