提取以 .csv.gz 结尾的文件列表以供下载

提取以 .csv.gz 结尾的文件列表以供下载

如何访问网站(需要用户名和密码)并将以 .csv.gz 结尾的所有文件的完整网站链接提取到 .txt 文件中(每行一行)。我不想从子文件夹中提取数据。

例如我希望将以下内容保存到 my.txt

http://www.google.com/1.csv.gz
http://www.google.com/xyz.csv.gz

但不应该保存

http://www.google.com/extra/abc.csv.gz

答案1

与 FTP 和其他一些协议不同,HTTP 协议不存在“拉取”所有文件列表之类的事情。如果你想获取 ( GET) 一个文件,你必须知道它的 URL。

许多 Web 服务器提供了一项便利功能(通常称为自动索引),该功能针对 URL生成一个 HTML 页面,其中包含指向服务器上该目录中存在的每个http://site/directory/URL 表单的链接列表,从而提供一种伪文件列出客户可以发现的列表。然而,此功能几乎从未用于站点的顶级目录 ( ),因为站点作者通常会为站点的顶级 URL 提供显式 HTML 页面。因此,如果存在,您通常无法找到它,除非您提前知道它的存在。http://site/directory/filefilehttp://site/http://www.google.com/1.csv.gz

如果您正在处理一个为您提供文件索引的 Web 服务器,那么您可以很容易地将列表从 HTML 转换为文本,并使用awk或进行一些文本处理sed,但这取决于特定 Web 服务器返回的确切格式它的 HTML 列表...

curl http://site/ | sed -e [....]

答案2

我假设您想要的所有文件都列在网站的索引页中。如果是这样,您可以使用文本浏览器,例如山猫转储该页面中找到的网址列表,然后使用 sed 提取您想要的网址。例如:

lynx -auth=ID:PASSWD -dump http://www.google.com |
sed '1,/^References/d
    \:www\.google\.com/[^/]*\.csv\.gz$:!d
    s/^ *[^ ]* //
' >my.txt

sed 删除 (d) 所有行,直到最后的引用列表(即 url 链接)。然后它会删除与您的模式不匹配的行(\: 引入一个新的模式分隔符:而不是/这样我们可以在模式中使用 / 而无需转义它)。[^/]*匹配除 . 之外的任何字符/$是行尾。然后它会删除 lynx 用于 url 的编号。

相关内容