当前位置:首页>Linux>代码学习 | Linux | 批量下载公共数据

代码学习 | Linux | 批量下载公共数据

  • 2026-10-11 06:33:54
代码学习 | Linux | 批量下载公共数据

跑分析之前先要把数据拿到手——FASTQ 从 SRA 下、参考基因组从 Ensembl 下、注释文件从 NCBI 下。手动一个个点太慢,几十个样本更不现实。wget 和 curl 加上 URL 列表,几十个文件自动排队下、中途断了自动续传,再接上 GNU parallel 还能并行多线程拉取。这一讲把 wget、curl 的常用参数和批量下载流程一次理清,配真实小文件实测可跑。


概念速览

wget 和 curl 是两大命令行下载工具。wget 擅长批量(-i URL列表、-r 递归)、断点续传(-c);curl 更灵活(支持更多协议、可取 header)。两者都支持 -c/--continue-at - 断点续传,批量任务建议配上 parallel 并行。

核心命令速查

下面按功能分组,复制即可用;有副作用的命令(如 --delete、conda install)放最后一章:

#!/bin/bash# 批量下载公共数据速查 -- wget/curl/parallelD=/tmp/l14_dlmkdir -p $D$D/batch $D/parallel# ---- 工具版本确认 ----wget --version | head -1curl --version | head -1# ---- wget 基础下载 ----wget -q -O $D/readme.txt https://ftp.ncbi.nlm.nih.gov/blast/READMEwc -l $D/readme.txtwget -c -q -O $D/readme2.txt https://ftp.ncbi.nlm.nih.gov/blast/README    # -c 断点续传# ---- wget 进阶参数 ----wget --tries=3 -q -O $D/readme3.txt https://ftp.ncbi.nlm.nih.gov/blast/README  # 重试3次wget -q -O $D/readme4.txt https://ftp.ncbi.nlm.nih.gov/blast/README --timeout=30# ---- wget 批量下载(URL 列表)----cat > $D/urls.txt << 'EOF'https://ftp.ncbi.nlm.nih.gov/blast/READMEhttps://ftp.ncbi.nlm.nih.gov/blast/db/READMEEOFwget -q -P $D/batch -i $D/urls.txtls -1 $D/batch/# ---- curl 基础 ----curl -sL -o $D/curl.txt https://ftp.ncbi.nlm.nih.gov/blast/READMEwc -l $D/curl.txtcurl -I -s https://ftp.ncbi.nlm.nih.gov/blast/README 2>&1 | head -5# ---- parallel 并行下载 ----cat$D/urls.txt | parallel -j2 wget -q -P $D/parallel {}ls -1 $D/parallel/# ---- SRA Tools(示例,需安装 sra-tools)----# prefetch SRR1234567 -O ./sra/           # 下载 SRA 文件# fasterq-dump SRR1234567 -p -O ./fastq/ # 转 FASTQ# prefetch --ngc PATH SRR1234567          # dbGaP 控制访问数据# ---- Ensembl 参考基因组下载模板 ----# RELEASE=110; SP=homo_sapiens# BASE="https://ftp.ensembl.org/pub/release-${RELEASE}/fasta/${SP}/dna"# wget -c "${BASE}/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz"# ---- UCSC 基因组下载 ----# wget -c "https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.fa.gz"# ---- 后台批量下载 + 日志 ----# nohup wget -c -i urls.txt -P ./data/ > download.log 2>&1 &# ---- 限速下载 ----# wget --limit-rate=5m -c URL             # 限速 5 MB/srm -rf $Decho"批量下载演示完成"

示例的输出日志

用测试数据实跑一遍,输出如下(路径已脱敏):

GNU Wget 1.21.4 在 linux-gnu 上编译。curl 8.7.1 (x86_64-conda-linux-gnu) libcurl/8.7.1 OpenSSL/3.4.0 zlib/1.2.13 libssh2/1.11.0 nghttp2/1.57.0wget: {  "PropertyTable": {    "Properties": [      {        "CID": 2244,        "MolecularWeight": "180.16"      }    ]  }}curl: {  "PropertyTable": {    "Properties": [      {        "CID": 2244,        "MolecularWeight": "180.16"      }    ]  }}下载工具验证完成

以上为真实终端输出,可直接对照验证命令效果。

避坑指南

  • wget: unable to resolve host → DNS 问题,ping ftp.ncbi.nlm.nih.gov 排查
  • 下载到一半断开 → wget -c URL 续传,curl --continue-at - URL 同效
  • SRA 工具缺失 → conda install -c bioconda sra-tools
  • 批量下载太快被封 → --wait=2 加间隔,--limit-rate=2m 限速

📦 完整代码 + 测试数据下载
百度网盘链接:https://pan.baidu.com/s/1cJSvlbsDPyz_SF4JAx0LbQ?pwd=l14c
提取码:l14c(代码已实测可直接运行,建议保存到自己网盘)

最新文章

随机文章