最近遇到一个问题,想下载http://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/zebrafish-fecal/v1.0/all_genomes/MGYG0002993/文件夹下嵌套的子目录及文件,使用wget下载
wget -r -np -nH --cut-dirs=5 -P ./ http://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/zebrafish-fecal/v1.0/all_genomes/MGYG0002993/
-r:递归下载。下载指定目录下的所有内容,包括子目录和文件。
-np:不向上导航。只下载指定目录及其子目录中的内容,不会下载父目录中的文件。防止 wget 超出指定的目录层级,避免下载不相关的文件。
-nH:不创建主机名目录。默认情况下,wget 会在当前目录下创建一个以主机名命名的目录(如 ftp.ebi.ac.uk),并将下载的文件放入其中。使用 -nH 可以避免创建此主机名目录,使文件直接下载到指定的本地目录中。
--cut-dirs=5:去掉前导目录层级。这个选项用于去掉 URL 中指定数量的目录层级。在这个例子中,--cut-dirs=5 表示去掉 URL 中前 5 个目录
-P ./:指定本地保存目录。
结果如下
进入到v1.0下面的目录,最终只有一个index.html
下载单个文件没问题
wget http://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/zebrafish-fecal/v1.0/all_genomes/MGYG0002993/MGYG000299300/genomes1/MGYG000299300.gff.gz
后来了解到把http改为ftp就好了
wget -r -np -nH --cut-dirs=5 -P ./ ftp://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/zebrafish-fecal/v1.0/all_genomes/MGYG0002993/
ftp (File Transfer Protocol) 代表文件传输协议,http代表浏览网页和下载内容的协议。单个文件下载时以http开头却可以成功是因为这里http服务器可以充当ftp服务器的代理。但是http没有内置的递归目录传输功能,导致递归下载是不行的。