使用http://curl.haxx.se/programs/curlmirror.txt [修改:当前版本https://github.com/cudeso/tools/blob/master/curlmirror.txt],我正在寻找下载网站并检查新下载的网站与我之间的更改之前已下载过。然而,当我下载相同的网站时,网站上的链接有时使用相对路径,有时它们使用绝对路径,即使网站没有改变,也算作“改变”。
Usage: curlmirror.pl -l -d 3 -o someOutputFileDirectory/url http://url
Output 1: <td><a href="testing.htm">LINK</a></td>
Output 2: <td><a href="http://example.com/testing.htm">LINK</a></td>
有没有办法将所有相对路径转换为绝对路径或反过来?我只需要标准化下载,以便这些链接不会显示为“更改”
答案 0 :(得分:1)
<强>已更新强>
我假设网址被放置到$url
变量。然后你可以尝试类似下面的东西:
perl -pe 'BEGIN {$url="http://somedomain.org"}
s!(\b(?:url|href)=")([^/]+)(")!$1$url/$2$3!gi' << XXX
<td><a href="testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="home">
XXX
输出:
<td><a href="http://mymain.org/testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="http://mymain.org/home">
如果href="..."
不包含url="..."
字符,它会替换所有href="$url/..."
或url="$url/..."
(不区分大小写)的模式...
或/
。
如果输入是文件,您可以直接在文件中替换这些模式:
cat >tfile << XXX
<td><a href="testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="home">
XXX
cat tfile
perl -i -pe 'BEGIN {$url="http://mymain.org"}
s!(\b(?:url|href)=")([^/]+)(")!$1$url/$2$3!gi' tfile
echo "---"
cat tfile
输出:
<td><a href="testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="home">
---
<td><a href="http://mymain.org/testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="http://mymain.org/home">