Как разрешить wget перезаписывать файлы

9

Используя wgetкоманду, как мне разрешить / дать указание перезаписывать мой локальный файл каждый раз, независимо от того, сколько раз я вызываю.

Допустим, я хочу скачать файл с места: http: //server/folder/file1.html

Здесь, всякий раз, когда я говорю wget http://server/folder/file1.html, я хочу, чтобы это file1.htmlбыло перезаписано в моей локальной системе, независимо от времени, когда оно было изменено, уже загружено и т. Д. Мое намерение / случай использования здесь заключается в том, что когда я вызываю wget, я очень уверен, что хочу заменить / перезаписать существующий файл.

Я опробовал следующие варианты, но каждый вариант предназначен / предназначен для какой-то другой цели.

  1. -nc => --no-clobber
  2. -N => Включить отметку времени
  3. -r => Включить рекурсивный поиск
Gnanam
источник

Ответы:

7
wget -q http://www.whatever.com/filename.txt -O /path/filename.txt 

-q тихий режим, так что вы можете бросить его в cron без вывода команды

aleroot
источник
В wgetкоманде нет прямой опции, которая делает это без явного указания -O filename?
Гнанам
3
Кажется, что нет способа принудительно перезаписать все файлы при загрузке файлов с помощью wget. Тем не менее, использование опции -N, безусловно, может принудительно загружать и перезаписывать новые файлы. wget -N Перезапишет оригинальный файл, если размер или метка времени изменятся
aleroot
Не правда. направить вывод команды в стандартный вывод и направить его в файл: wget -q $ urlYouNeedToGrap> $ fileYouWantToOverwriteEverytime
rasjani
8

Эта опция работает

wget -N http://server/folder/file1.html

Информация

-N,  --timestamping            don't re-retrieve files unless newer than
                               local.
Стивен Пенни
источник
4

Использовать curlвместо?

curl http://server/folder/file1.html > file1.html
Стю Томпсон
источник
Я не эксперт по Linux. В чем принципиальная разница между wgetи curl? Я уверен, что каждая команда предназначена для определенной цели.
Гнанам
1
@Gnanam: На самом деле они во многом совпадают с базовой утилитой CLI. Оба могут установить HTTP-соединение и сохранить результат на диск. Чтобы ознакомиться с различиями, ознакомьтесь с daniel.haxx.se/docs/curl-vs-wget.html. Независимо от вышесказанного, приведенное выше использование является действительным. В этой общей области есть и другие инструменты: curl.haxx.se/docs/comparison-table.html
Стю Томпсон,
Эти 2 ссылки действительно полезны, чтобы понять разницу.
Гнанам
0

Я не думаю, что вы можете сделать это, если вы также не загрузите каталоги (поэтому передайте флаг -x). Если вы знаете, что это за файл, вы можете использовать -O filename, например:
wget http://yourdomain.com/index.html -O index.html

Джеймс Л
источник
0

Не проверено: возможно, вы можете работать с wget -r --level=0.

Другая возможность: curl -Oперезаписывает (но использует другой способ выбора имени файла, который может иметь или не иметь значения для вас).

Жиль "ТАК - прекрати быть злым"
источник
Эта wgetстрока на самом деле не делает правильную вещь, потому что она создает иерархию подкаталогов. curl -Oс другой стороны, правильно загружает файл, перезаписывая существующие копии.
STH
0

Почему бы не поместить небольшую оболочку вокруг wget в ваш скрипт?

Сценарий может переместить все файлы во временную папку, а затем создать удаленные файлы / веб-страницы.

В случае успеха удалите файлы во временном местоположении. В случае неудачи переместите файлы обратно и выдайте ошибку.

Нет простого способа сделать то, что вы хотите, используя только wget, если вы точно не знаете имя всех файлов, в этом случае опция -O позволит вам принудительно указать имя файла загруженного файла.

Ричард Холлоуэй
источник