如何从服务器下载大量文档到终端上?

如何从服务器下载大量文档到终端上?

我必须编写一个少于 300 个字符的 bash 脚本 (.sh),用于下载此服务器中的所有基因组 22ftp://ftp.ncbi.nih.gov/genomes/Homo_sapiens/(带有 fa.gz 扩展名的)并提取它们。我的第一个任务只是编写, wget ftp://ftp.ncbi.nih.gov/genomes/Homo_sapiens/CHR_01/hs_alt_CHM1_1.1_chr1.fa.gz | gunzip 但我无法为 22 个文件执行此操作。我发现除了 CHM 和 chr 旁边的数字之外,所有文件都具有相同的名称。例如第十个基因组是ftp://ftp.ncbi.nih.gov/genomes/Homo_sapiens/CHR_10/hs_alt_CHM1_1.1_chr10.fa.gz 我想我必须做某种递归代码,但我对 bash 不太有经验,所以非常感谢任何帮助。谢谢你!

答案1

一个简单的循环就足够了:

for i in {1..22}
do
    wget "ftp://ftp.ncbi.nih.gov/genomes/Homo_sapiens/CHR_${i}/hs_alt_CHM1_1.1_chr${i}.fa.gz"
    gunzip "hs_alt_CHM1_1.1_chr${i}.fa.gz"
done

循环索引不必只是数字,您还可以通过以下方式获取、MTUn文件:XY

for i in {1..22} MT Un X Y

由于第一组数字必须用零填充,printf因此您可以使用:

或者:

firsti="$(printf "%02d" $i)"
wget "ftp://ftp.ncbi.nih.gov/genomes/Homo_sapiens/CHR_${firsti}/hs_alt_CHM1_1.1_chr${i}.fa.gz"

MT Un X Y您可以针对每个循环运行测试,但更简单的方法是使用原始. 将字符 ( ) 移动到单独的循环中wget

相关内容