Wget - Сохранение файла в локальном каталоге с именем ссылки

Wget - Сохранение файла в локальном каталоге с именем ссылки

Я новичок в использовании wget, поэтому надеюсь, что это не глупый вопрос:

Как сохранить файл в локальном каталоге, названном по имени ссылки на файл?

Похоже, это не сработает, если при загрузке использовалось перенаправление.

Например: скажем, я скачиваю файл из www.abc.com/news/xyz.jif, я могу заставить wget сохранить локальную копию в каталоге www.abc.comс именем sub directory news, а затем file xyz.jif.

Однако если файл xyz.jifбыл перемещен www.qwerty.com/old/xyz.jifи поиск был перенаправлен туда, файл все равно будет сохранен в www.abc.com...и т.д.

Как я уже сказал, я новичок в этом деле, поэтому надеюсь, что я правильно объяснил проблему.

Вот простой пример из реальной жизни (с использованием wget):

wget --force-directories www.smugmug.com/photos/1235566-S.jpg

он сохраняется в: c:\www.smugmug.com/photos/1235566-S.jpg , чтоневерный. Он должен был сохранить его в c:\suz.smugmug.com/photos/1235566-S.jpg, куда он был перенаправлен.

решение1

Извините, не уловил суть изначально. Итак, совершенно новый ответ (быстрый и грязный - и поскольку это программирование на bash, оно работает только с linux): используйте cURL, чтобы определить, есть ли перенаправление (используя -wпараметр); в зависимости от результата используйте wget, чтобы получить либо исходный URL, либо цель перенаправления:

url=www.smugmug.com/photos/1235566-S.jpg; redirurl=`curl -w "%{redirect_url}" --output /dev/null --silent ${url}`; if [ -z $redirurl ]; then wget -x $url; else wget -x $redirurl; fi

Или, в несколько строк:

url=www.smugmug.com/photos/1235566-S.jpg;
redirurl=`curl -w "%{redirect_url}" --output /dev/null --silent ${url}`;
if
    [ -z $redirurl ];
then wget -x $url;
else wget -x $redirurl; fi

redirurlустанавливается на цель перенаправления, если таковая имеется. Если нет, wgetвызывается с исходным URL; если да, wgetвызывает цель перенаправления. -xПараметр заставляет wgetсоздавать подкаталоги.

Конечно, это обрабатывает только один уровень перенаправления. Чтобы сделать его более надежным, вам придется рекурсивно проверять, есть ли перенаправление. Так что это не просто вопрос параметров командной строки, если вы хотите решить эту проблему надежным способом.

Связанный контент