在 wget 下载文件之前修改文件名称(不重命名本地版本)

在 wget 下载文件之前修改文件名称(不重命名本地版本)

我有一个网站文件系统,其中每个文件都有两个副本,一个摘要副本和一个大副本,它们的名称不同。例如,一个大副本文件可能是 页面/信息/GK2grkG23r_lg.html而在摘要副本中,扩展名前的字母被更改为页面/信息/GK2grkG23r_sh.html。我试图在文件系统上运行 wget,但所有链接都设计为指向小副本以节省资源,而我需要大副本。因此在运行 wget 时页面可能会下载所有摘要副本:

pages/info/GK2grkG23r_sh.html
pages/info/2Yp58xr4Ir_sh.html
pages/info/Lmk2nIj23r_sh.html
pages/info/M23Dka6D4r_sh.html

我想将 wget 要下载的文件的名称更改为:

pages/info/GK2grkG23r_lg.html
pages/info/2Yp58xr4Ir_lg.html
pages/info/Lmk2nIj23r_lg.html
pages/info/M23Dka6D4r_lg.html

即使 wget 找到的文件也指向第一组。

需要说明的是,我不想下载上面第一组名称的文件,然后重命名它们。我想运行 wget,它会尝试下载第一个文件列表,但会稍微更改字母,以便下载第二个列表。wget 可以做到这一点吗?

答案1

您可以尝试一种解决方法。

这些里程碑包括:

  1. 下载完整文件列表并将其存储在文件中
  2. 更改文件名的最后部分
  3. 仅下载名称已修改的文件。

filter.awk你需要一个类似这样的文件

/^--.*--  http:\/\/.*[^\/]$/ { u=$3; }
/^Length: [[:digit:]]+/ { print u; }

一步步:

wget -r -np --spider http://yourhost | awk -f filter.awk  > My_List.txt
sed -i s/_sh.html/_lg.html/g My_List.txt
wget -x -i My_List.txt

致谢:
我的灵感来自这个答案

答案2

首先,获取索引文件:

wget -O index.html "$URI"

然后,重写其中的 URL:

sed -i '/_sh\(\.html\)/_lg\1/g' index.html

(我使用了 sed,但您可能更喜欢基于 XSLT 的方法。请随意选择。)

现在,告诉 wget 抓取所有内容pages/info/*,使用修改后的索引文件并将其原始位置作为起始基础 URI:

wget --recursive --level=1 \
    --input-file=index.html --force-html --base="$URI" \
    --accept-regex 'pages/info/.*_lg\.html'

注意:大多数长选项都有短选项 - 请参阅手册页。为了清晰起见,我使用了长格式。

相关内容