Wget не перезаписывать файл

Обновлено: 07.07.2024

Особенности wget

Утилита wget обладает рядом особенностей, делающих её самым эффективным и популярным инструментом для организации загрузок, в особенности среди системных администраторов:

  • утилита является стандартным инструментом для дистрибутивов на базе Не нужно предварительно ничего устанавливать, настраивать или компилировать (если, конечно не нужно использовать самую актуальную версию wget), достаточно просто начать использование;
  • wget поддерживает работу в фоновом режиме;
  • утилита самостоятельно контролирует соединения и поэтому способна осуществлять докачку при потере соединений или плохой связи;
  • поддержка рекурсивного режима работы wget позволяет автоматически выполнять закачки из множества ресурсов, например, закачивая несколько HTML-страниц или поддиректорий с FTP-сервера.

Опции

wget в примерах

Как уже отмечалось выше, wget имеет довольно простой (наряду с таким богатым функционалом) синтаксис. В самых распространённых случаях для wget указывается один единственный параметр — ссылка (URL) на ресурс (файл, картинка, HTML-страница, каталог FTP-сервера и т.д.) для закачки:

Если вы получите ошибку -bash: wget: команда не найдена, то необходимо установить wget

И снова запустите команду


В данном случае wget скачала архив c CMS Drupal с официального сайта разработчиков. Как видно, запрос был автоматически перенаправлен к FTP-ресурсу, с которого потом и началась закачка. Утилита в процессе своей работы наглядно выводит всю информацию о соединении и закачке: протокол, скорость, объём, прогресс, время и т. д. По-умолчанию закачки сохраняются в текущем каталоге.

Работа с прокси-сервером

Использование рекурсивной закачки

Чтобы заставить wget автоматически переходить по ссылкам и скачивать соответствующие ресурсы, нужно воспользоваться ключом -r. Также с помощью ключа -l можно указать, до какой глубины спускаться по ссылкам:

В данном случае для ключа -l указано значение 0 — бесконечная глубина ссылок. Дополнительный ключ -np указывает wget, что в ходе рекурсивного исполнения нельзя подниматься выше указанного уровня (директории), т. е. в данном случае выше articles.

Следующая команда скачает сайт полностью

Режим докачки

Докачивание файлов очень полезно при некачественном или низкоскоростном соединении. Когда необходимо продолжить закачку без потери прогресса после обрывов подключений или когда из-за низкой скорости не хватает времени завершить закачку за один раз. В таких случаях нужно использовать для wget режим докачки и для этого служит ключ -c. Например:

Ключ -t, используемый в данном примере позволяет задавать количество попыток. (0 — бесконечное число попыток) повторного соединения при обрывах. На самом деле, ключи -t и -c разумно использовать всегда.

Фоновый режим

Закачку с помощью утилиты wget можно (а часто даже нужно) запускать в фоновом режиме. Для этого предназначен ключ -b:

Работа продолжается в фоновом режиме, pid 22121

Выходные данные будут записаны в «wget-log».

При этом командная оболочка освободится для других задач. А вывод, который помещается в файл wget-log (текущего каталога) можно отслеживать командой tail -f wgetlog.

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

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

(Рад использовать curl или аналогичную альтернативу, если wget не может этого сделать.)

Ну, он создает новый, потому что он распознает файл там!

Я предлагаю вам использовать -N опцию.

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

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

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

Если сервер не настроен должным образом, -N может произойти сбой, и wget всегда будет загружен заново. Так что иногда -nc лучше, чем -N @Kasiy, спасибо за ваш комментарий, похоже, нет подходящего варианта для всех случаев.

Да, это -c вариант.

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

Предостережения (из комментариев Джофеля)

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

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

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

Вы можете проверить это, запустив простой локальный веб-сервер следующим образом (благодаря @roadmr «S ответа ):

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

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

Обратите внимание, что filename-to-download это файл, в /path/to/parent-download-dir/ котором мы хотим его скачать.

Теперь, если вы запустите команду wget несколько раз, вы увидите:

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

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

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

wget — консольная утилита для скачивания файлов/сайтов.
Умеет выкачивать файлы рекурсивно, следуя по ссылкам автоматически.


Пример использования для скачивания документации Django:

-r - ходим по ссылкам (рекурсивное скачивание)
-k - преобразовываем ссылки к локальному виду
-p - скачивание ресурсов необходимых для отображения html-страницы (стили, картинки и т.д.)
-l - глубина скачивания, 0 - бесконечная вложенность ссылок
-nc - не перезаписывать существующие файлы
-np - не подниматься выше начального адреса при рекурсивной загрузке

Каждый ключ имеет алиас (синоним),
например ключ -h соответствует --help (вызов помощи по команде).


Для докачивания файла от себя рекомендую применять такие ключи:

--continue - собственно режим докачивания файла
--timestamping - перекачивать файл только, если он новее локального
--tries=5 - кол-во попыток подключений при неудаче
--timeout=15 - задержка между попытками (секунд)
--no-cache - запретить кеширование данных
--no-dns-cache - запретить кеширование DNS адреса

Батник получения и подстановки для WGET настроек прокси Internet Explorer:

GNU Wget 1.11.4, a non-interactive network retriever.
Usage: wget [OPTION]. .

Mandatory arguments to long options are mandatory for short options too.

Startup:
-V, --version display the version of Wget and exit.
-h, --help print this help.
-b, --background go to background after startup.
-e, --execute=COMMAND execute a `.wgetrc'-style command.

Logging and input file:
-o, --output-file=FILE log messages to FILE.
-a, --append-output=FILE append messages to FILE.
-d, --debug print lots of debugging information.
-q, --quiet quiet (no output).
-v, --verbose be verbose (this is the default).
-nv, --no-verbose turn off verboseness, without being quiet.
-i, --input-file=FILE download URLs found in FILE.
-F, --force-html treat input file as HTML.
-B, --base=URL prepends URL to relative links in -F -i file.

Directories:
-nd, --no-directories don't create directories.
-x, --force-directories force creation of directories.
-nH, --no-host-directories don't create host directories.
--protocol-directories use protocol name in directories.
-P, --directory-prefix=PREFIX save files to PREFIX/.
--cut-dirs=NUMBER ignore NUMBER remote directory components.

FTP options:
--ftp-user=USER set ftp user to USER.
--ftp-password=PASS set ftp password to PASS.
--no-remove-listing don't remove `.listing' files.
--no-glob turn off FTP file name globbing.
--no-passive-ftp disable the "passive" transfer mode.
--retr-symlinks when recursing, get linked-to files (not dir).
--preserve-permissions preserve remote file permissions.

Recursive download:
-r, --recursive specify recursive download.
-l, --level=NUMBER maximum recursion depth (inf or 0 for infinite).
--delete-after delete files locally after downloading them.
-k, --convert-links make links in downloaded HTML point to local files.
-K, --backup-converted before converting file X, back up as X.orig.
-m, --mirror shortcut for -N -r -l inf --no-remove-listing.
-p, --page-requisites get all images, etc. needed to display HTML page.
--strict-comments turn on strict (SGML) handling of HTML comments.

Recursive accept/reject:
-A, --accept=LIST comma-separated list of accepted extensions.
-R, --reject=LIST comma-separated list of rejected extensions.
-D, --domains=LIST comma-separated list of accepted domains.
--exclude-domains=LIST comma-separated list of rejected domains.
--follow-ftp follow FTP links from HTML documents.
--follow-tags=LIST comma-separated list of followed HTML tags.
--ignore-tags=LIST comma-separated list of ignored HTML tags.
-H, --span-hosts go to foreign hosts when recursive.
-L, --relative follow relative links only.
-I, --include-directories=LIST list of allowed directories.
-X, --exclude-directories=LIST list of excluded directories.
-np, --no-parent don't ascend to the parent directory.

Минусы утилиты:

- Не умеет скачивать файл в папку под конкретным именем - всегда берет в роле имени адрес за последним слешем URL.
- Давно не развивается, например, не поддерживает новые протоколы подключения по шифрованному соединению.
- Сравнение Curl vs Wget (англ.)

Все мы иногда качаем файлы из интернета. Если для этого использовать программы с графическим интерфейсом, то всё оказывается предельно просто. Однако, при работе в командной строке Linux дело несколько усложняется. Особенно — для тех, кто не знаком с подходящими инструментами. Один из таких инструментов — чрезвычайно мощная утилита wget, которая подходит для выполнения всех видов загрузок. Предлагаем вашему вниманию двенадцать примеров, разобрав которые, можно освоить основные возможности wget.




1. Загрузка одного файла

Если всё, что нужно — это загрузка одного файла, нам подойдёт следующая конструкция:


После ввода такой команды начнётся скачивание Nagios Core. В ходе этого процесса можно будет видеть данные о загрузке, например — сведения о том, какой объём данных уже загружен, текущую скорость, и то, сколько времени осталось до конца загрузки.

2. Загрузка файла и сохранение его с новым именем

Если мы хотим сохранить загруженный файл под именем, отличающимся от его исходного имени, нам пригодится команда wget с параметром -O :


При таком подходе загруженный файл будет сохранён под именем nagios_latest .

3. Ограничение скорости загрузки файлов

При необходимости скорость загрузки файлов с помощью wget можно ограничить. В результате эта операция не будет занимать весь доступный канал передачи данных и не повлияет на другие процессы, связанные с сетью. Сделать это можно, используя параметр --limit-rate и указав ограничение скорости, выраженное в байтах (в виде обычного числа), килобайтах (добавив после числа K ) или мегабайтах ( M ) в секунду:


Здесь задано ограничение скорости загрузки, равное 500 Кб/с.

4. Завершение прерванной загрузки

Если в ходе загрузки файлов эта операция была прервана, можно возобновить загрузку с помощью параметра -c команды wget :


Если этот параметр не использовать, то загрузка недокачанного файла начнётся сначала.

5. Фоновая загрузка файла

Если вы загружаете файл огромного размера и хотите выполнять эту операцию в фоне, сделать это можно, используя параметр -b :

6. Загрузка нескольких файлов

Если имеется список URL файлов, которые надо загрузить, но вам не хочется вручную запускать загрузки этих файлов, можно использовать параметр -I . Однако, перед тем, как начинать загрузку, нужно создать файл, содержащий все адреса. Например, сделать это можно такой командой:


В этот файл нужно поместить адреса — по одному в каждой строке. Далее, осталось лишь запустить wget , передав этой утилите только что созданный файл со списком загрузок:


Выполнение этой команды приведёт к поочерёдной загрузке всех файлов из списка.

7. Увеличение общего числа попыток загрузки файла

Для того, чтобы настроить число повторных попыток загрузки файла, можно использовать параметр --tries :

8. Загрузка файлов с FTP-сервера

Команда загрузки файла с анонимного FTP-сервера с помощью wget выглядит так:


Если для доступа к файлу требуются имя пользователя и пароль, то команда примет такой вид:

9. Создание локальной копии веб-сайта

Если нужно загрузить содержимое целого веб-сайта, сделать это можно, воспользовавшись параметром --mirror :


Обратите внимание на дополнительные параметры командной строки:

  • -p : производится загрузка всех файлов, необходимых для корректного отображения HTML-страниц.
  • --convert-links : ссылки в документах будут преобразованы для целей локального просмотра сайта.
  • -P /home/dan : материалы будут сохранены в папку /home/dan .

10. Загрузка с сайта только файлов определённого типа

Для того, чтобы загрузить с сайта только файлы определённого типа, можно воспользоваться параметрами -r -A :

11. Пропуск файлов определённого типа

Если вы хотите скопировать целый веб-сайт, но при этом вам не нужны файлы определённого типа, отключить их загрузку можно с помощью параметра --reject :

12. Загрузка с использованием собственного .log-файла

Для того, чтобы загрузить файл и использовать при этом собственный .log -файл, воспользуйтесь параметром -o и укажите имя файла журнала:

Итоги

Wget — довольно простая в использовании, но весьма полезная утилита Linux. И, на самом деле то, о чём мы рассказали — лишь малая часть того, что она умеет. Надеемся, этот обзор поможет тем, кто не был знаком с wget, оценить эту программу, и, возможно, включить её в свой повседневный арсенал инструментов командной строки.

Пакет wget уже предустановлен в большинстве дистрибутивов Linux.

Чтобы проверить, установлен ли пакет Wget в вашей системе, откройте консоль, введите wget и нажмите клавишу ввода. Если у вас установлен wget, система напечатает wget: missing URL , в противном случае он будет печатать wget command not found .

Если wget не установлен, вы можете легко установить его с помощью менеджера пакетов вашего дистрибутива.

Установка Wget на Ubuntu и Debian

Установка Wget на CentOS и Fedora

Синтаксис команды Wget

Прежде чем перейти к использованию wget команды, давайте начнем с обзора основного синтаксиса.

В wget полезности выражение принимает следующий вид:

  • options - варианты Wget
  • url - URL файла или каталога, который вы хотите скачать или синхронизировать.

Как скачать файл с помощью Wget

В простейшей форме, когда используется без какой-либо опции, wget загрузит ресурс, указанный в [url], в текущий каталог.

В следующем примере мы загружаем tar-архив ядра Linux:



Как видно из рисунка выше, Wget начинает с разрешения IP-адреса домена, затем подключается к удаленному серверу и начинает передачу.

Во время загрузки Wget показывает индикатор выполнения наряду с именем файла, размером файла, скоростью загрузки и предполагаемым временем завершения загрузки. После завершения загрузки вы можете найти загруженный файл в текущем рабочем каталоге .

Чтобы отключить вывод Wget, используйте -q опцию.

Если файл уже существует, Wget добавит .N (число) в конце имени файла.

Использование команды Wget для сохранения загруженного файла под другим именем

Чтобы сохранить загруженный файл под другим именем, передайте -O опцию, а затем выбранное имя:

Команда выше сохранит последнюю файл hugo zip из GitHub latest-hugo.zip вместо его исходного имени.

Использование команды Wget для загрузки файла в определенный каталог

По умолчанию Wget сохраняет загруженный файл в текущем рабочем каталоге. Чтобы сохранить файл в определенном месте, используйте -P параметр:

С помощью приведенной выше команды мы сообщаем Wget сохранить ISO-файл CentOS 7 в /mnt/iso каталог.

Как ограничить скорость загрузки с помощью Wget

Чтобы ограничить скорость загрузки, используйте --limit-rate опцию. По умолчанию скорость измеряется в байтах / секунду. Добавить k за килобайт, m за мегабайты и g за гигабайты.

Следующая команда загрузит двоичный файл Go и ограничит скорость загрузки до 1 Мб:

Эта опция полезна, когда вы не хотите, чтобы wget использовал всю доступную пропускную способность.

Как возобновить загрузку с помощью Wget

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

В следующем примере мы возобновляем загрузку iso-файла Ubuntu 18.04:

Если удаленный сервер не поддерживает возобновление загрузки, Wget начнет загрузку с начала и перезапишет существующий файл.

Как скачать в фоновом режиме с Wget

Для загрузки в фоновом режиме используйте -b опцию. В следующем примере мы загружаем iso-файл OpenSuse в фоновом режиме:

По умолчанию выходные данные перенаправляются в wget-log файл в текущем каталоге. Чтобы посмотреть статус загрузки, используйте tail команду:

Как изменить Wget User-Agent от Wget

Иногда при загрузке файла удаленный сервер может быть настроен на блокировку Wget User-Agent. В подобных ситуациях для эмуляции другого браузера передайте -U опцию.

Как скачать несколько файлов с помощью Wget

Если вы хотите загрузить несколько файлов одновременно, используйте -i параметр, после которого укажите путь к локальному или внешнему файлу, содержащему список URL-адресов для загрузки. Каждый URL должен быть в отдельной строке.

В следующем примере мы загружаем iso файлы Arch Linux, Debian и Fedora с URL-адресами, указанными в linux-distros.txt файле:

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

Использование команды Wget для загрузки через FTP

Чтобы загрузить файл с FTP-сервера, защищенного паролем, укажите имя пользователя и пароль, как показано ниже:

Использование команды Wget для создания зеркала сайта

Чтобы создать зеркало сайта с помощью Wget, используйте -m опцию. Это создаст полную локальную копию веб-сайта, перейдя и загрузив все внутренние ссылки, а также ресурсы веб-сайта (JavaScript, CSS, изображения).

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

Эта -k опция заставит Wget конвертировать ссылки в загруженных документах, чтобы сделать их пригодными для локального просмотра. -p Опция покажет Wget , чтобы загрузить все необходимые файлы для отображения страницы HTML.

Как пропустить проверку сертификата с помощью Wget

Как скачать в стандартный вывод с помощью Wget

В следующем примере Wget тихо (пометит -q ) загрузит и выведет последнюю версию WordPress в stdout (пометит -O - ) и tar передаст ее утилите, которая извлечет архив в /var/www каталог.

Вывод

С помощью Wget вы можете загружать несколько файлов, возобновлять частичную загрузку, зеркалировать веб-сайты и комбинировать параметры Wget в соответствии с вашими потребностями.

Читайте также: