一个大型生物研究项目选择通过 https 提供其档案:
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/
不幸的是,这些目录的内容似乎没有清单,所以我只想构建一个。我想获取整个目录树的文件名。有没有关于如何做到这一点的建议?我可以在 perl/python/R/etc 中写一些东西。以递归方式抓取 index.html 文件,但我认为 wget 可能有一些咒语可以让我获得文件名,但我还没有找到。
与 FTP 协议相反,HTTP 不知道目录列表的概念。因此,wget只能寻找链接并根据用户定义的某些规则遵循它们。
话虽如此,如果您绝对需要,您可以滥用wget调试模式来收集在分析 HTML 页面时遇到的链接列表。它确实不美丽,但这里是:
wget -d -r -np -N --spider -e robots=off --no-check-certificate \
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/ \
2>&1 | grep " -> " | grep -Ev "\/\?C=" | sed "s/.* -> //"
Run Code Online (Sandbox Code Playgroud)
一些旁注:
uniq修剪列表。--spider导致wget不下载任何内容,但它仍然会对它认为要排队的每个文件执行 HTTP HEAD 请求。这将导致比实际需要/预期更多的流量,并导致整个过程非常慢。-e robots=off需要忽略robots.txt可能导致wget无法开始搜索的文件(您在问题中给出的服务器就是这种情况)。wget1.14 或更高版本,您可以使用它--reject-regex="\?C="来减少不必要的请求数量(对于 @slm 已经提到的那些“排序依据”链接)。这也消除了后续步骤的需要grep -Ev "\/\?C="。小智 5
我实际上遇到了完全相同的问题。这两种解决方案对我都不起作用。然而,这确实:
安装lftp,然后做
lftp https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/
du -a > manifest.txt
Run Code Online (Sandbox Code Playgroud)
这会给你所有的目录和文件名。
| 归档时间: |
|
| 查看次数: |
18600 次 |
| 最近记录: |