我正在尝试从以下位置下载文件https://www.ebi.ac.uk/ena/data/view/PRJEB5736我想为所有示例递归下载 file1 和 file2 (仅 FTP fastq)文件。请告诉我如何在linux下做到这一点。
谢谢
答案1
如果所有链接都像看起来一样规则,您可以尝试以下操作:
results=147
for ((i=0; i<147; i++)); do
base=ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/
ext=$((445410+i))
suff=.fastq.gz
for j in 1 2; do wget "${base}${ext}/${ext}/_${j}${suff}"; done
done
据我所知,此下载中没有任何递归内容。链接地址检查给出了一些提示:
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/ERR445410/ERR445410_1.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/ERR445410/ERR445410_2.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/ERR445411/ERR445411_1.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/ERR445411/ERR445411_2.fastq.gz
所以它们之间应该只有三个部分发生变化:
ERR<nr>/ERR<nr>_<1 or 2>
步长为ERR
1,结果计数为 147,这就是一个完整的答案(假设这就是这个故事的全部内容)。因此,完成所有下载后,计算新文件数并确保有 2 * 147 个文件。
下载过程当然可以优化。如上所述,wget
每个链接都会启动一个进程。我将把优化留给你,这里只介绍分析和基本解决方案。