我可以访问一个在线 HTTP 目录。我已尝试通过 wget
下载所有子目录和文件。但是,问题在于,当 wget
下载子目录时,它会下载包含该目录中文件列表的 index.html
文件,而不会下载文件本身。
有没有办法下载没有深度限制的子目录和文件(好像我要下载的目录只是我要复制到我的计算机的文件夹)。
https://i.stack.imgur.com/uNOuS.png
解决方案:
wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/
解释:
它将下载 ddd 目录中的所有文件和子文件夹
-r :递归
-np : 不去上层目录,比如 ccc/...
-nH :不将文件保存到主机名文件夹
--cut-dirs=3 :但通过省略前 3 个文件夹 aaa、bbb、ccc 将其保存到 ddd
-R index.html : 不包括 index.html 文件
感谢 to this post 使用 VisualWGet,我能够让它工作。它对我很有用。重要的部分似乎是检查 -recursive
标志(见图)。
还发现 -no-parent
标志很重要,否则它将尝试下载所有内容。
https://i.stack.imgur.com/pi8lr.png
你可以使用 lftp,如果你有更大的文件,你可以将 --use-pget-n=10
添加到命令中
lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'
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 中,如人们会期望。
无需软件或插件!
(仅当您不需要递归深度时才可用)
使用书签。将 this link 拖动到书签中,然后编辑并粘贴此代码:
(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(); } } })();
并转到页面(从您要下载文件的位置),然后单击该书签。
save as
对话框吗?
wget
是一种非常宝贵的资源,也是我自己使用的。但是,有时地址中的某些字符会被 wget
识别为语法错误。我确信有一个解决方法,但由于这个问题没有具体询问wget
,我想我会为那些无疑会偶然发现此页面寻找快速解决方案而无需学习曲线的人提供替代方案.
有一些浏览器扩展可以做到这一点,但大多数都需要安装下载管理器,它们并不总是免费的,往往令人眼花缭乱,并且使用大量资源。继承人没有这些缺点:
“下载大师”是谷歌浏览器的扩展,非常适合从目录下载。您可以选择过滤要下载的文件类型,或下载整个目录。
https://chrome.google.com/webstore/detail/download-master/dljdacfojgikogldjffnkdcielnklkce
有关最新功能列表和其他信息,请访问开发人员博客上的项目页面:
http://monadownloadmaster.blogspot.com/
您可以使用 this Firefox 插件下载 HTTP 目录中的所有文件。
https://addons.mozilla.org/en-US/firefox/addon/http-directory-downloader/
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/
-R
(如-R css
)排除所有 CSS 文件,或使用-A
(如-A pdf
)仅下载 PDF 文件。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.
的其他建议robots.txt
文件不允许下载目录中的文件,这将不起作用。在这种情况下,您需要添加-e robots=off
。请参阅unix.stackexchange.com/a/252564/10312