Могу ли я остановить создание дубликатов?

Если вы используете authbind для запуска tomcats, нам не нужны iptables или какие-либо программы для перенаправления, надеюсь, что эта ссылка будет полной.

https://askubuntu.com/a/685306/377678 [ ! d1]

1
задан 15 January 2015 в 15:36

3 ответа

Да, это опция -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

Теперь откройте другой терминал и выполните: [ ! d13]

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 ....

Причина: зачем перегружать?

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

12
ответ дан 24 May 2018 в 00:12
  • 1
    Это не работает правильно, если файл изменился на сервере между загрузками. В худшем случае (размер файла увеличился) вы получаете поврежденный файл. – jofel 13 January 2015 в 16:55
  • 2
    @jofel yes -nc не так, как вы сказали, но опция -c будет работать, и именно поэтому я упомянул опцию -c. – αғsнιη 13 January 2015 в 16:58
  • 3
    С -c, wget запрашивает сервер для любых данных за пределами части уже загруженного файла, ничего больше. Он не проверяет, есть ли какое-либо изменение в уже загруженной части файла на сервере. В худшем случае вы получаете поврежденный файл, который представляет собой смесь между старым и новым файлом. – jofel 13 January 2015 в 17:06
  • 4
    после рассмотрения вариантов, я думаю, что это полезно только для чего-то вроде файла журнала (гарантированные инкрементные обновления), во всех остальных случаях я думаю, что -N или -nc более уместны, поскольку они имеют дело со целыми файлами – d3vid 20 January 2015 в 11:59

Также есть еще один вариант, называемый -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 в порядке.

2
ответ дан 24 May 2018 в 00:12

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

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

Эта команда

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

1
ответ дан 24 May 2018 в 00:12
  • 1
    Если ваш терминал находится в плохом состоянии, потому что вы отображаете двоичные файлы, возможно, проще вызвать программу «сброс», чем открытие нового терминала. – jofel 14 January 2015 в 16:49
  • 2
    вы правы, что я не совсем понял свои требования, счастливый результат в том, что я узнал о еще нескольких вариантах :) спасибо – d3vid 20 January 2015 в 11:54
  • 3
    Спасибо @jofel ^^ не знал о «перезагрузке». Я только что закрыл открытую новую вкладку и закрыл искаженный, когда это произошло ... хотя на самом деле я этого не делал часто. – Goblinlord 21 January 2015 в 04:12

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

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