Intereting Posts
Как я могу распаковать gz-файлы в произвольных каталогах и хранить распакованные файлы в тех же самых каталогах? Как избежать $ здесь Как узнать, какое приложение отключает сон? Команда Sed со специальным символом Невозможно установить пакеты с помощью dnf в Fedora 22 на платформе ARM Как объединить куски текстовых файлов в каталог в один или несколько файлов? Создайте серию все более крупных файлов Как сделать автоматический кликер с глобальным ключом запуска и остановки скрипту необходимо добавить еще один цикл Как извлечь часть текста из файла? Номер порта шины USB и физическое положение USB Захват данных с Fluke 1620a через netcat Crontab для резервного копирования каталога Существует ли практическое применение для команды фактора GNU? Как создать и автоматически синхронизировать «объединенный» каталог из нескольких других каталогов без дублирования файлов?

Как определить, куда перенаправляется ссылка

В настоящее время я работаю над скриптом, который обновляет файл. Файл имеет несколько версий. Важные имеют статические ссылки. Они перенаправляются на фактический файл, который затем загружается с помощью wget . Я выяснил, что wget имеет флаг, который печатает получаемые заголовки. Список мест. Последнее местоположение, обозначенное в заголовке, является фактическим URL. Мне нужно это получить!

Моя идея состояла в том, чтобы использовать wget -S для получения заголовка (мне нужен еще один флаг, который предотвращает загрузку и создание файла). Затем используйте трубку для разбора строк и поиска последней строки, содержащей location . Я предполагаю, что это можно реализовать, используя grep -l -i "location:" | tail -l grep -l -i "location:" | tail -l . Затем мне нужно оставить одну строчку, которая может быть легко проанализирована.

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

 # The -??? flag is the one that prevents the file from downloading. (I don't know it) Location=$(wget -S -??? $URL | grep -l -i "location:" | tail -l) 

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

Вы хотите получить запрос HEAD, но wget не поддерживает его; curl .

Вероятнее всего, ваше распространение имеет curl в репозиториях.

curl -s -I $URL -L | awk '/Location: (.*)/ {print $2}' | tail -n 1

 $ URL=http://unix.stackexchange.com/questions/89282/ $ curl -s -I $URL | awk '/Location: (.*)/ {print $2}' | tail -n 1 /questions/89282/how-to-figure-out-where-a-link-gets-redirected $ _ , $ URL=http://unix.stackexchange.com/questions/89282/ $ curl -s -I $URL | awk '/Location: (.*)/ {print $2}' | tail -n 1 /questions/89282/how-to-figure-out-where-a-link-gets-redirected $ _ 

Вот:

  • -s предотвращает показ индикатора индикатора выполнения;
  • -I curl запрос HEAD;
  • -L делает curl следуя переадресации (спасибо @brianstone), вы можете захотеть или не захотеть включить это, в зависимости от того, какие заголовки перенаправления вы хотите отслеживать;
  • awk-скрипт печатает совпадающее выражение в parens, только локальную часть URI.