Wget + Make

Содержание
Введение
Проверка существования директории
Wildcard: скачивание по неполному имени
Связанные статьи

Введение

Про make отдельно можно прочитать в статье make

Про wget в статье wget

Предварительно изучите эти статьи если ваши знания по теме не очень обширны.

В этой статье вы можете изучить несколько примеров их совместного использования

Проверка существования директории

Полезно проверить существование директории, в которую вы хотите что-то скачать. Если такой нет, можно её создать

LINUX_DIR=/home/$$(whoami)/Downloads/linux_isos/ .PHONY: centos7-readme centos7-readme: # Download centos7_README.txt $(check_dir) @if [ ! -f $(LINUX_DIR)centos7_README.txt ]; then \ wget -c http://centos.mirror.far.fi/7.9.2009/isos/x86_64/0_README.txt \ -O $(LINUX_DIR)centos7_README.txt; \ else \ echo "centos7_README.txt already exists"; \ fi define check_dir if [ ! -d $(LINUX_DIR) ]; then \ echo "INFO: Creating dir "$(LINUX_DIR); \ mkdir -p $(LINUX_DIR); \ fi endef

Wildcard: скачивание по неполному имени

У файла в репозитории может периодически меняется часть имени.

Например, выходит новая версия у которой в названии другие цифры.

Мне часто нужно скачивать самую последнюю версию софта, не важно какие у него цифры в имени. Я переименовываю скачанный файл в какое-то легко запоминаемое название.

С этим помогает использование * - wildcard

Допустим, нам нужен файл
ubuntu-18.00.1-desktop-amd64.list
а может быть уже вышла новая версия -
ubuntu-18.04.6-desktop-amd64.list

в общем мы не хотим заносить в скрипт точный номер.

Нам нужно скачать актуальную версию файла и переименовать в ubuntu-desktop.list если файл уже есть - скачивать не нужно, нужно выдать предупреждение.

Для примера воспользуемся репозиторием Ubuntu от компании Yandex https://mirror.yandex.ru/ubuntu-releases/bionic/

Обратите внимание - не все репозитории поддерживают wildcard я пробовал репозиторий от Timeweb - https://mirror.timeweb.ru/ubuntu-releases/bionic/ и скрипт не сработал.

Будем считать, что это скрипт работает при поддержке сервиса Yandex Аренда - переходите по ссылке если сдаёте/ищете жильё.

LINUX_DIR=/home/$$(whoami)/Downloads/linux_isos/ UBUNTU_REPO="mirror.yandex.ru" .PHONY:download-ubuntu-desktop-list download-ubuntu-desktop-list: # Download ubuntu-desktop.list $(check_dir) @if [ ! -f $(LINUX_DIR)ubuntu-desktop.list ]; then \ wget -r -np "https://$(UBUNTU_REPO)/ubuntu-releases/bionic/ubuntu-18.04.6-desktop-amd64.list" \ -A "*-desktop-amd64.list"; \ else \ echo "WARNING: ubuntu-desktop.list already exists"; \ fi sudo mv ./$(UBUNTU_REPO)/ubuntu-releases/bionic/* $(LINUX_DIR)ubuntu-desktop.list @rm -rf $(UBUNTU_REPO) define check_dir @if [ ! -d $(LINUX_DIR ]; then \ echo "INFO: Creating dir "$(LINUX_DIR; \ mkdir -p $(LINUX_DIR); \ else echo "INFO: Directory "$(LINUX_DIR" already exists"; \ fi endef

Проверить результат скачивания можно командой

ls /home/$(whoami)/Downloads/linux_isos

centos7_README.txt ubuntu-desktop.list

Пояснения: сначала с репозитория была скачана вся иерархия до файла ubuntu-18.04.6-desktop-amd64.list

Если бы мы в этот момент выполнили

tree mirror.timeweb.ru

То увидели бы

mirror.timeweb.ru └── ubuntu-releases └── bionic └── ubuntu-18.04.6-desktop-amd64.list

Затем командой mv файл перемещается в нужную директорию и переименовывается.

Последний шаг - удаление ненужной более иерархии

Похожие статьи
wget + make
make
CURDIR
shell
-c: Компиляция
Linux
Bash
C
C++
C++ Header файлы
Configure make install
DevOps
Docker
OpenBSD
Errors make