Пропустить загрузку, если файлы существуют в wget?


Ответы:


274

Попробуйте следующий параметр:

-nc, --no-clobber: Пропустить загрузки , которые приведут к существующим файлам.

Пример использования:

wget -nc http://example.com/pic.png

35
-ncне препятствует отправке HTTP-запроса и последующей загрузке файла. Он просто ничего не делает после загрузки файла, если файл уже был полностью восстановлен. Есть ли способ предотвратить отправку HTTP-запроса, если файл уже существует? stackoverflow.com/questions/33203898/…
— ma11hew28

8
Как отмечено в связанном вопросе, я не согласен - если используется no-clobber и имя файла существует, оно выходит. Нет запроса HEAD даже. Даже если это не так, проверьте, есть ли у вас файл для начала :-)[ ! -e "$(basename $URL)" ] && wget $URL
— plundra

3
Я думаю, что я могу получить разные результаты, потому что я использую эту --recursiveопцию.
— ma11hew28

200

Опция -nc, --no-clobberне лучшее решение, поскольку новые файлы не будут загружены. -NВместо этого следует использовать, который будет загружать и перезаписывать файл, только если на сервере установлена ​​более новая версия, поэтому правильный ответ:

wget -N http://www.example.com/images/misc/pic.png

Затем, запустив Wget с -N, с или без -rили -p, решение о том, загружать или нет более новую копию файла, зависит от локальной и удаленной метки времени и размера файла. -ncне может быть указан одновременно с -N.

-N, --timestamping: Включить отметку времени.


39
Если сервер не настроен должным образом, -Nможет произойти сбой, и wget всегда будет загружен заново. Так что иногда -ncлучшее решение.
— пользователь

2
Что может быть применимым сценарием, когда «Когда сервер не настроен должным образом» будет происходить?
— AjayKumarBasuthkar

когда вы загружаете из местоположения, которое было скопировано, меняются все временные метки.
— Роберт

Будет ли это лучше, зависит от контекста. Например, я загружаю ~ 1600 файлов из списка, а затем обновил список, добавив в него еще несколько файлов. Файлы не меняются, поэтому меня не волнует последняя версия, и я не хочу, чтобы она проверяла сервер на наличие новых версий 1600 файлов, которые у меня уже есть.
— Дж. Бентли,

2
@AjayKumarBasuthkar: если сервер не поддерживает какой-либо способ проверки наличия нового файла, он wgetбудет жаловаться Last-modified header missing; это как раз описанная ситуация.
— Писквор покинул здание

23

При запуске Wget с -rили -p, но без -N, -ndили-nc повторная загрузка файла приведет к тому, что новая копия будет просто перезаписывать старую.

Таким образом, добавление -ncпредотвратит это поведение, вместо этого сохраняя исходную версию и игнорируя любые новые копии на сервере.

Смотрите больше информации на GNU.


18

Ответ, который я искал, находится на https://unix.stackexchange.com/a/9557/114862 .

Использование -cфлага, когда локальный файл имеет больший или равный размер с версией сервера, позволит избежать повторной загрузки.


1
Это особенно здорово, когда вы скачиваете кучу файлов с флагом -i. wget -i filelist.txt -cвозобновит неудачную загрузку списка файлов.
— Тревор
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.