Пропустити завантаження, якщо файли існують у wget?


202

Це найпростіший приклад запуску wget:

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

але як змусити пропустити завантаження wget, якщо pic.pngвоно вже доступне?

Відповіді:


273

Спробуйте наступний параметр:

-nc, --no-clobber: пропустити завантаження, які завантажуватимуться в існуючі файли.

Використання зразка:

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

35
-ncне перешкоджає надсиланню HTTP-запиту та подальшому завантаженню файлу. Після завантаження файлу він нічого не робить, якщо файл уже був повністю завантажений. Чи є в будь-якому випадку запобігання запиту HTTP, якщо файл вже існує? stackoverflow.com/questions/33203898 / ...
ma11hew28

8
Як зазначається у пов'язаному питанні, я не погоджуюся - якщо не використовується 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 файлів, які у мене вже є.
JBentley

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.