Я могу остановить wget создающие дубликаты?

Если я выполняю wget дважды, он не распознает, что уже загрузил тот файл и создает новый. Там какой-либо путь состоит в том, чтобы предотвратить его загружающий файл снова?

$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...

$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png.1’
...

(Счастливый использовать завихрение или подобную scriptable альтернативу, если wget не может сделать этого.)

13
задан 15 January 2015 в 04:36

4 ответа

Я предлагаю, чтобы Вы использовали -N опция.

-N
--timestamping
    Turn on time-stamping.

Это позволяет установить метку времени, который повторно загружает файл только если ее более новое на сервере, чем загруженная версия.

$ wget -N https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...

$ wget -N https://cdn.sstatic.net/askubuntu/img/logo.png
...
Server file no newer than local file ‘logo.png’ -- not retrieving.

Протест (из комментария KasiyA)

, Если сервер не настроен правильно, он может всегда сообщать, что файл является новым, и -N будет всегда повторно загружать файл. В этом случае, -nc, вероятно, более оптимальный вариант.

17
ответ дан 23 November 2019 в 03:12

Также существует другая опция, названная -nc для wgetting:

--no-clobber
   If a file is downloaded more than once in the same directory, Wget's behavior
   depends on a few options, including -nc.  In certain cases, the local file will
   be clobbered, or overwritten, upon repeated download.  In other cases it will be
   preserved.

, Когда -nc опция будет определена, Wget откажется загружать копии того же файла. Если у Вас был тот же файл, что wget попытки загрузить, он откажется загружать его, если Вы не переименуете или удаляете локальный файл.

$ wget -nc https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...

$ wget -nc https://cdn.sstatic.net/askubuntu/img/logo.png
File ‘logo.png’ already there; not retrieving.

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

Протест (из комментария jofel)

-nc опция не обновляет файл, если это изменилось на сервере. Если Вы знаете, что файл изменится, -N, опция предпочтительна. Если Вы знаете, что файл не изменится (или Вы не заботитесь), тогда -nc, в порядке.

3
ответ дан 23 November 2019 в 03:12

Я знаю, что это было конкретным вопросом относительно wget, но OP действительно упоминал "Счастливый использовать завихрение или подобную scriptable альтернативу, если wget не может сделать этого". Я не уверен, что здесь требование (несколько файлов, сохраните старую версию, если отличающийся от исходного, замены недавно загруженной версией). В зависимости от того, что Вы хотите и как Вы хотите обработать дубликаты, Вам, возможно, понадобятся больше, чем это.. Очень простой способ сделать, что Вы, кажется, хотите, состоит в том, чтобы просто использовать завихрение вместо этого.

curl http://cdn.sstatic.net/askubuntu/img/logo.png?v=ca4d192163aa > logo.png

Эта команда заменит старый файл недавно загруженным каждый раз.

не производят это к терминалу (без"> [имя файла]"), если Вы загружаете двоичный файл в противоположность тексту. Выполнение так желание могло потенциально смешать с Вашим терминальным сеансом. В случае Вы действительно делаете это на несчастном случае, Вы, возможно, должны открыть другую оболочку/терминальный сеанс.

1
ответ дан 23 November 2019 в 03:12

Да это -c опция.

--continue
    Continue getting a partially-downloaded file.  This is useful when you want to
    finish up a download started by a previous instance of Wget, or by another
    program.

Если файл будет тем же, то вторая попытка загрузки остановится.

$ wget -c https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...

$ wget -c https://cdn.sstatic.net/askubuntu/img/logo.png
...
The file is already fully retrieved; nothing to do.

Протесты (из комментариев jofel)

Если файл изменился на сервере, -c опция может дать неправильные результаты.

С -c, wget просто просит у сервера любые данные вне части уже загруженного файла, ничего иного. Это не проверяет, было ли какое-либо изменение в части файла, который уже загружается. Таким образом Вы могли поврежденный файл, который является смесью старого и нового файла.


Локальный тест

Можно протестировать его путем выполнения простого локального веб-сервера как после (Благодаря ответу @roadmr):

Откройте Окна терминала и тип:

cd /path/to/parent-download-dir/
python -m SimpleHTTPServer

Теперь откройте другой Терминал и сделайте:

wget -c http://localhost:8000/filename-to-download

Отметьте это filename-to-download файл, который расположился в /path/to/parent-download-dir/ который мы хотим загрузить его.

Теперь при выполнении команды wget для многократно, Вы будете видеть:

The file is already fully retrieved; nothing to do.

Хорошо, теперь перейдите в /path/to/parent-download-dir/ каталог и добавляет что-то к исходному файлу, например, если это - текстовый файл, добавьте простую дополнительную строку в нем и сохраните файл. Теперь попробуйте wget -c ... . Большой, теперь Вы будете видеть перезагрузки файла снова, но Вы уже загрузили его прежде.

Причина: почему перезагрузка?

потому что его размер, измененный на больший размер, чем старый загруженный файл и ничто иное.

16
ответ дан 23 November 2019 в 03:12

Другие вопросы по тегам:

Похожие вопросы: