如何从 URL 下载特定文件夹

如何从 URL 下载特定文件夹

当我使用此命令时:

wget -r -np -nH --cut-dirs=6 -R "index.html*" -e robots=off "https://physionet.org/physiobank/database/challenge/2018/training/"

它将下载training文件夹内的所有文件夹(994 个文件夹)。如果有办法编辑命令以仅下载某些文件夹(例如前 50 个文件夹)。

这些文件夹按此顺序排列,每个文件夹内有四个文件:

tr03-0005                                                      
tr03-0029                                                          
tr03-0052                                                          
tr03-0061                                                         
tr03-0078                                                            
tr03-0079                                                            
tr03-0083                                                            
tr03-0086                                                           
tr03-0087                                                      
tr03-0092 
.
. 
.

提前致谢

答案1

您可以使用-i标志,它将读取要从文件下载的 URL 列表。因此,如果您有包含以下内容的 file.txt:

https://physionet.org/physiobank/database/challenge/2018/training/tr03-0005                                                      
https://physionet.org/physiobank/database/challenge/2018/training/tr03-0029 

然后使用wget other_options -i file.txt,您将只下载这两个文件夹,即前两个文件夹。请注意,-i您不需要传递 URL,因为每个 URL 都将从文件中读取。

答案2

阅读man wget,你会发现

   -X list
   --exclude-directories=list
       Specify a comma-separated list of directories you wish to exclude from download.
       Elements of list may contain wildcards.

答案3

Wget 没有任何可以解释这种方式的限制(我记得或找到的)。

但是对于这种特定情况,您可以使用 shell 简单地解析出限制内的子目录并单独获取它们:

# Where `n` is the limit we want
n=50; c=0; for f in $(curl https://physionet.org/physiobank/database/challenge/2018/training/ | grep '^<a href="tr' | sed 's/.*"\(.*\)".*/\1/'); do if [ $c -ge $n ]; then break; fi; wget -r -np -nH --cut-dirs=5 -R "index.html*,.mat" -e robots=off "https://physionet.org/physiobank/database/challenge/2018/training/${f}"; c=$(($c + 1)) ; done

相关内容