Wget: Пропустить загрузку, если файл уже существует?

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

Я установил wget 1.16.3 с помощью Homebrew. После выполнения команды ниже wget сказал что-то вроде making HTTP request для каждого уже существующего файла, появился, чтобы загрузить его, а затем сказал что-то вроде: file already retrieved, nothing to do.

wget --user-agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12' \
     --tries=1 \
     --no-clobber \
     --continue \
     --wait=0.3 \
     --random-wait \
     --adjust-extension \
     --load-cookies cookies.txt \
     --save-cookies cookies.txt \
     --keep-session-cookies \
         --recursive \
         --level=inf \
         --convert-links \
         --page-requisites \
         --reject=edit,logout,rate \
         --domains=example.com,s3.amazonaws.com \
         --span-hosts \
         --exclude-directories=/admin \
     http://example.com/

Ответ 1

Похоже, вы используете несовместимые опции, я получаю следующее предупреждение о wget 1.16 linux:

$ wget --no-clobber --convert-links http://example.com
Both --no-clobber and --convert-links were specified, only --convert-links will be used.

Ответ 2

Опция -nc делает то, о чем вы просите, по крайней мере, в wget 1.19.1.


На моем сервере у меня есть файл с именем index.html, который содержит ссылки на a.html и b.html.

$ wget -r -nc http://127.0.0.1:8000/

Журналы сервера показывают это:

127.0.0.1 - - [23/Mar/2017 17:51:25] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [23/Mar/2017 17:51:25] "GET /robots.txt HTTP/1.1" 404 -
127.0.0.1 - - [23/Mar/2017 17:51:25] "GET /a.html HTTP/1.1" 200 -
127.0.0.1 - - [23/Mar/2017 17:51:25] "GET /b.html HTTP/1.1" 200 -

Теперь я удаляю b.html и запускаю его снова:

$ rm 127.0.0.1\:8000/b.html
$ wget -r -nc http://127.0.0.1:8000/

Журналы сервера показывают это:

127.0.0.1 - - [23/Mar/2017 17:51:38] "GET /robots.txt HTTP/1.1" 404 -
127.0.0.1 - - [23/Mar/2017 17:51:38] "GET /b.html HTTP/1.1" 200 -

Как вы можете видеть, был сделан запрос только для b.html.