我已经用httracks 搜索了一个网站,并生成了许多不同级别的文件。但是该网站使用带有httrack无法处理 的属性的picture
/source
标签,所有这些图片在离线时都无法正常工作。srcset
如果使用选项Attempt to detect all links (even in unknown tags/javascript code)
(在 winhttrack 中)并将所有图像复制到本地存储,httrack可以看到链接。但它并没有改变相对的路径。
现在我需要一个脚本(powershell/gnu bash),它可以编辑所有 html 文件以使srcset
s 中的路径适应正确的相对路径。
我的想法是对每个文件夹进行递归,并附加一个../
作为参数来插入/替换为sed
.
该怎么办:
示例文件:
index.html
cat1/product1.html
cat2/option3/product5.html
每个都包含一些图片标签,例如:
<picture>
<source srcset="/images/img1_low.jpg, /images/img1_low_ret.jpg x2" media="(max-width: 470px)">
<source srcset="/images/img1_med.jpg, /images/img1_med_ret.jpg x2" media="(max-width: 960px)">
<source srcset="/images/img1_hi.jpg, /images/img1_hi_ret.jpg x2" media="(min-width: 961px)">
<img src="../images/img1_hi.jpg" />
</picture>
在图像标签内,路径始终是正确的httrack
:(images/img1_hi.jpg
,,,../images/img1_hi.jpg
)../../images/img1_hi.jpg
但源标签也必须包含匹配的路径:
在 index.html 中:
<picture>
<source srcset="images/img1_low.jpg, images/img1_low_ret.jpg x2" media="(max-width: 470px)">
<source srcset="images/img1_med.jpg, images/img1_med_ret.jpg x2" media="(max-width: 960px)">
<source srcset="images/img1_hi.jpg, images/img1_hi_ret.jpg x2" media="(min-width: 961px)">
<img src="images/img1_hi.jpg" />
</picture>
在 cat1/product1.html 中:
<picture>
<source srcset="../images/img1_low.jpg, ../images/img1_low_ret.jpg x2" media="(max-width: 470px)">
<source srcset="../images/img1_med.jpg, ../images/img1_med_ret.jpg x2" media="(max-width: 960px)">
<source srcset="../images/img1_hi.jpg, ../images/img1_hi_ret.jpg x2" media="(min-width: 961px)">
<img src="../images/img1_hi.jpg" />
</picture>
在 cat2/option3/product5.html 中:
<picture>
<source srcset="../../images/img1_low.jpg, ../../images/img1_low_ret.jpg x2" media="(max-width: 470px)">
<source srcset="../../images/img1_med.jpg, ../../images/img1_med_ret.jpg x2" media="(max-width: 960px)">
<source srcset="../images/img1_hi.jpg, ../../images/img1_hi_ret.jpg x2" media="(min-width: 961px)">
<img src="../../images/img1_hi.jpg" />
</picture>
我的尝试:
#!/usr/bin/bash
function workfolder {
# $1 = current folder
# $2 = prefix upfolders
pushd $PWD
cd $1
for i in $( ls ) ; do
if [ -d $i ] ; then
workfolder $i ../$2
fi
done
for i in $( ls *.html ) ; do
sed -i 's/srcset="images/srcset="$2images/g' $i
sed -i 's/, images/, $2images/g' $i
done
popd
}
workfolder .
除了太多错误之外,$2
sed 替换中的问题并没有解决,而是被替换掉了。