基本上在网页上有一个目录列表,每个目录都有其他子目录。子目录包含许多文件,我想在我的linux机器上的一个位置下载每个子目录中的一个文件,该子目录具有特定的序列字母' RMD'在它。
例如,假设主网页链接到目录dir1,dir2,dir3 ......,并且每个目录都有子目录dir1a,dir1b ...,dir2a,dir2b ...等我想下载表格的文件:
webpage/dir1/dir1a/file321RMD210
webpage/dir1/dir1b/file951RMD339
...
webpage/dir2/dir2a/file416RMD712
webpage/dir2/dir2b/file712RMD521
目录/子目录没有按照上面的例子顺序编号(这只是让我更容易阅读)所以是否有一个终端命令将递归遍历每个目录和子目录并下载每个文件& #39; RMD'在文件名?
相关网站是:here
我希望有足够的信息。
答案 0 :(得分:2)
我注意到这个网站支持FTP协议,这是一种更方便的阅读文件和文件夹的方式。 (它用于传输文件,而不是网页)
获取一个FTP客户端(很多关于它们)并打开ftp://atmos.nmsu.edu/PDS/data/mslrem_1001/DATA/你可以只突出显示那里的所有文件夹并点击下载。
答案 1 :(得分:1)
回答很多评论:
如果网站支持ftp ,最好使用@MichaelBaldry's answer。这个答案旨在提供一种方法来使用
wget
(但这对服务器和客户端来说效率较低)。
仅在网站使用目录列表的情况下,您可以使用-r
标记(-R
标记旨在查找网页中的链接,然后下载这些页面也是如此。
以下方法对于服务器和客户端 效率低,如果页面是动态生成的,则会导致巨大的负载。您提到的网站明确要求不以那种方式获取数据。
wget -e robots=off -r -k -nv -nH -l inf -R jpg,jpeg,gif,png,tif --reject-regex '(.*)\?(.*)' --no-parent 'http://atmos.nmsu.edu/PDS/data/mslrem_1001/DATA/'
使用:
wget
您要致电的计划; -e robots=off
;您忽略了网站请求不自动下载的事实; -r
:您递归下载; -R jpg,jpeg,gif,png,tif
:拒绝下载媒体(小图片); --reject-regex '(.*)\?(.*)'
不要关注或下载查询页面(索引页面的排序)。-l inf
:您继续下载无限级别--no-parent
:阻止wget
开始在网站的父级中获取链接(例如,指向父目录的..
链接。)
wget
下载文件广度优先,因此您必须等待很长时间才能最终开始获取真实数据文件。
请注意,
wget
无法猜测服务器端的目录结构。它的目的只是在获取的页面中找到链接,因此这种知识的目的是产生一个"可见"文件。 Web服务器可能未列出所有可用文件,因此wget
将无法下载所有文件。
答案 2 :(得分:1)
使用saxon-lint
的一个解决方案:
saxon-lint --html --xpath 'string-join(//a/@href, "^M")' http://atmos.nmsu.edu/PDS/data/mslrem_1001/DATA/ | awk '/SOL/{print "http://atmos.nmsu.edu/PDS/data/mslrem_1001/DATA/"$0}' | while read url; do saxon-lint --html --xpath 'string-join(//a/@href, "^M")' "$url" | awk -vurl="$url" '/SOL/{print url$0}'; done | while read url2; do saxon-lint --html --xpath 'string-join(//a/@href, "^M")' "$url2" | awk -vurl2="$url2" '/RME/{print url2$0}'; done | xargs wget
编辑
"^M"
by control + M (Unix)或\r\n
for windows