为什么在单个 shell 脚本中运行多个针对 ENA 的 wget 命令时 wget 会失败?[已结束]

Why does wget fail when running multiple wget commands targeting the ENA in a single shell script? [closed]

提问人:Sj1993 提问时间:8/15/2023 最后编辑:Sj1993 更新时间:8/15/2023 访问量:78

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

3个月前关闭。

我想从欧洲核苷酸档案馆下载与特定 BioProject (PRJEB21446) 相关的 FASTQ 文件。有一个按钮用于生成和下载一个 shell 脚本,其中包含与 BioProject 关联的所有 FASTQ 文件的 wget 命令。伟大!这给了我一个包含以下命令的脚本:

wget -nc [ftp-link-to-sample1.fastq.gz]
wget -nc [ftp-link-to-sample2.fastq.gz]
...
wget -nc [ftp-link-to-sample40.fastq.gz]

编辑:以下是 ENA 脚本的前 5 行:

wget -nc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/004/ERR2014384/ERR2014384_1.fastq.gz
wget -nc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/006/ERR2014386/ERR2014386_1.fastq.gz
wget -nc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/001/ERR2014361/ERR2014361_1.fastq.gz
wget -nc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/009/ERR2014369/ERR2014369_1.fastq.gz
wget -nc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/007/ERR2014367/ERR2014367_1.fastq.gz

但是,当我尝试使用 运行脚本时,第一个文件下载没有任何问题,但之后的所有文件都停留在 0% 大约 20 秒,然后显示以下内容:sh script_from_ENA.sh

2023-08-14 10:54:01 (0.00 B/s) - Data transfer aborted.
Retrying.

wget然后尝试一遍又一遍地下载相同的文件,但没有成功。

在花了一上午的时间尝试各种解决方法后,我最终通过将所有 URL 放入一个文件中并在 for 循环中运行来解决这个问题,如下所示:wget

sed 's/wget -nc //' script_from_ENA.sh > url-list
for i in `cat url-list` ; do wget -nc $i ; done

这就像一个魅力,下载的文件没有任何问题,但我仍然很好奇为什么 ENA 生成的脚本不起作用。是 ENA 服务器的问题还是 ENA 服务器切断了我的联系?wget

如果有人能提供见解或解释,我将不胜感激——谢谢!

BASH 生物信息学 WGET FASTQ

评论

0赞 Cyrus 8/15/2023
在您的问题中添加前 5-10 行。script_from_ENA.sh
0赞 John Bollinger 8/15/2023
...也就是说,逐字逐句。具有完整的 URL。
2赞 John Bollinger 8/15/2023
shell 中没有特别的原因,也没有特别的原因说明为什么通过循环运行多个命令的行为应该与单独运行相同的命令不同。但是,根据 URL 的形式,shell 对文件行的解释可能与另一种方式不同。wgetwget
1赞 Cyrus 8/15/2023
我以 5 MBytes/s 的速度下载所有 108 个文件没有问题。
2赞 Cyrus 8/15/2023
不客气。我建议你删除这个问题,因为它与软件开发无关。

答:

1赞 Daweo 8/15/2023 #1

请注意,如果您有 URL 列表,则无需执行此操作

sed 's/wget -nc //' script_from_ENA.sh > url-list
for i in `cat url-list` ; do wget -nc $i ; done

as has 选项,即 或 wget 手册页所说的wget-i file--input-file=file

从本地或外部文件读取 URL。

就您而言,如果您有这样的情况urls.txt

ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/004/ERR2014384/ERR2014384_1.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/006/ERR2014386/ERR2014386_1.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/001/ERR2014361/ERR2014361_1.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/009/ERR2014369/ERR2014369_1.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR201/007/ERR2014367/ERR2014367_1.fastq.gz

你可以做

wget -i urls.txt