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

202

Это простейший пример запуска wget:

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

но как сделать так, чтобы wget пропускал загрузку, если pic.pngон уже доступен?

Наис Инпох Ган
источник

Ответы:

274

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

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

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

wget -nc http://example.com/pic.png
plundra
источник
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флага, когда локальный файл имеет больший или равный размер с версией сервера, позволит избежать повторной загрузки.

jsta
источник
1
Это особенно здорово, когда вы скачиваете кучу файлов с флагом -i. wget -i filelist.txt -cвозобновит неудачную загрузку списка файлов.
Тревор