Я новичок в использовании 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
создавать подкаталоги.
Конечно, это обрабатывает только один уровень перенаправления. Чтобы сделать его более надежным, вам придется рекурсивно проверять, есть ли перенаправление. Так что это не просто вопрос параметров командной строки, если вы хотите решить эту проблему надежным способом.