Wget - 将文件保存到以链接命名的本地目录

Wget - 将文件保存到以链接命名的本地目录

我是 wget 的新手,所以我希望这不是一个愚蠢的问题:

如何将文件保存到以文件链接命名的本地目录?

如果下载过程中涉及重定向,它似乎不起作用。

例如:假设我正在从 下载一个文件,我可以让 wget 将本地副本保存到以子目录命名www.abc.com/news/xyz.jif的目录中,然后保存文件。www.abc.comnewsxyz.jif

但是,如果文件xyz.jif被移动到www.qwerty.com/old/xyz.jif并且搜索被重定向到那里,则文件仍然保存在www.abc.com...etc下

正如我所说,我对此还很陌生,所以我希望我已经正确地解释了这个问题。

这是一个简单的现实世界示例(使用 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创建子目录。

当然,这只能处理一级重定向。为了使其更强大,您必须递归检查是否存在重定向。因此,如果您想以可靠的方式解决此问题,这不仅仅是命令行选项的问题。

相关内容