如何下载包含在线文件/文件夹列表中的所有文件和子目录的HTTP目录?


187

我可以访问一个在线HTTP目录。我尝试通过下载所有子目录和文件wget。但是,问题在于,当wget下载子目录时,它会下载index.html包含该目录中文件列表的文件,而不下载文件本身。

有没有一种方法可以下载没有深度限制的子目录和文件(好像我要下载的目录只是我要复制到计算机上的文件夹)。

在线HTTP目录

Answers:


353

解:

wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

说明:

  • 它将下载ddd目录中的所有文件和子文件夹
  • -r :递归地
  • -np:不上层目录,例如ccc /…
  • -nH :不将文件保存到主机名文件夹
  • --cut-dirs=3:但是通过省略前三个文件夹aaabbbccc将其保存到ddd
  • -R index.html:排除index.html 文件

参考:http : //bmwieczorek.wordpress.com/2008/10/01/wget-recursively-download-all-files-from-certain-directory-listed-by-apache/


17
谢谢!同样,根据供您参考,您可以-R-R css排除所有CSS文件-A一样使用,也可以像-A pdf仅下载PDF文件一样使用。
约翰

7
谢谢!来自wget手册页的 其他建议When downloading from Internet servers, consider using the ‘-w’ option to introduce a delay between accesses to the server. The download will take a while longer, but the server administrator will not be alarmed by your rudeness.
jgrump2012 '16

3
我收到此错误,“ wget”未被识别为内部或外部命令,可操作程序或批处理文件。
hamish

1
@hamish您可能需要先安装wget或wget不在$ PATH中。
Mingjiang Shi

16
很好的答案,但是请注意,如果目录中有robots.txt禁止下载文件的文件,则此操作将无效。在这种情况下,您需要添加-e robots=off 。参见unix.stackexchange.com/a/252564/10312
Daniel Hershcovich

45

感谢这篇使用VisualWGet的帖子,我能够使它工作。这对我来说很棒。重要的部分似乎是检查-recursive标志(见图)。

还发现该-no-parent标志很重要,否则它将尝试下载所有内容。

在此处输入图片说明 在此处输入图片说明


2
刚刚发现-2017年12月。它工作正常。我在sourceforge.net/projects/visualwget上
SDsolar's

2
在Windows计算机上工作正常,不要忘记检查答案中提到的选项,否则将无法工作
csharpcoder

不适用于某些https。@DaveLucre,如果您尝试在cmd解决方案中使用wget,也可以下载,但我猜有些服务器不允许这样做
Yannis Dran

检查--no-parent做什么?
T.Todua

1
2020年3月开始工作!
程序员先生

7
wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

man wget

'-r' '-- recursive '启用递归检索。有关更多详细信息,请参见递归下载。默认最大深度为5。

'-np''--no-parent' 递归检索时不要升至父目录。这是一个有用的选项,因为它可以确保仅下载特定层次结构下的文件。有关更多详细信息,请参见基于目录的限制。

'-nH''--no-host-directories' 禁用主机前缀目录的生成。默认情况下,使用-r http://fly.srk.fer.hr/调用Wget 将创建以fly.srk.fer.hr/开头的目录结构。此选项禁用这种行为。

'--cut-dirs = number' 忽略数字目录组件。这对于对将保存递归检索的目录进行精细控制很有用。

以目录“ ftp://ftp.xemacs.org/pub/xemacs/ ” 为例。如果使用“ -r”检索它,它将被本地保存在ftp.xemacs.org/pub/xemacs/下。尽管“ -nH”选项可以删除ftp.xemacs.org/部分,但您仍然对pub / xemacs感到困惑。这就是'--cut-dirs'派上用场的地方;这使Wget无法“看到”远程目录组件的数量。以下是“ --cut-dirs”选项如何工作的几个示例。

无选项-> ftp.xemacs.org/pub/xemacs/ -nH-> pub / xemacs / -nH --cut-dirs = 1-> xemacs / -nH --cut-dirs = 2->

--cut-dirs = 1-> ftp.xemacs.org/xemacs/ ...如果只想摆脱目录结构,此选项类似于'-nd'和'-P'的组合。但是,与“ -nd”不同,“-cut-dirs”不会随子目录丢失,例如,对于“ -nH --cut-dirs = 1”,beta /子目录将被放置到xemacs / beta中,如下所示:人们会期望的。


3
一些解释会很好。
伯努瓦Latinier

如何使用VisualWget下载特定文件类型?是否可以在VisualWget的目录及其子目录中仅下载mp3文件?
杰森

3

wget是宝贵的资源,也是我自己使用的东西。但是,有时地址中的某些字符会wget识别为语法错误。我敢肯定有解决办法,但是由于这个问题并没有专门询问wget我想为那些无疑会在本页上寻找不需要学习曲线的快速解决方案的人们提供替代方案。

有一些浏览器扩展程序可以做到这一点,但是大多数浏览器扩展程序都需要安装下载管理器,这些下载器并不总是免费的,容易使人眼花,乱,并占用大量资源。没有以下缺点的继承人:

“下载大师”是Google Chrome浏览器的扩展程序,非常适合从目录下载。您可以选择过滤要下载的文件类型,或下载整个目录。

https://chrome.google.com/webstore/detail/download-master/dljdacfojgikogldjffnkdcielnklkce

有关最新功能列表和其他信息,请访问开发人员博客上的项目页面:

http://monadownloadmaster.blogspot.com/



2

无需软件或插件!

(仅在不需要递归分解时可用)

使用书签。将此链接拖动到书签中,然后编辑并粘贴以下代码:

(function(){ var arr=[], l=document.links; var ext=prompt("select extension for download (all links containing that, will be downloaded.", ".mp3"); for(var i=0; i<l.length; i++) { if(l[i].href.indexOf(ext) !== false){ l[i].setAttribute("download",l[i].text); l[i].click(); } } })();

并转到页面(从中下载文件),然后单击该书签。


1

您可以使用lftp,这是下载工具,如果您有较大的文件,可以将其添加--use-pget-n=10到命令中

lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'

完美且非常快速地工作,这使我的Internet线下载了成千上万个小文件。很好。
n13

-1

wget通常以这种方式工作,但是某些站点可能会出现问题,并且可能会创建太多不必要的html文件。为了简化这项工作并防止不必要的文件创建,我共享了getwebfolder脚本,这是我为自己编写的第一个linux脚本。该脚本下载作为参数输入的Web文件夹的所有内容。

当您尝试通过wget下载一个包含多个文件的打开的Web文件夹时,wget将下载一个名为index.html的文件。该文件包含Web文件夹的文件列表。我的脚本将用index.html文件编写的文件名转换为网址,并使用wget清楚地下载它们。

在Ubuntu 18.04和Kali Linux上进行了测试,它也可以在其他发行版中使用。

用法:

  • 从下面提供的zip文件中提取getwebfolder文件

  • chmod +x getwebfolder (仅限第一次)

  • ./getwebfolder webfolder_URL

./getwebfolder http://example.com/example_folder/

下载链接

博客上的详细信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.