如何:并发 cURL 下载?

如何:并发 cURL 下载?

如何使用 curl 同时下载多个文件?即使我们需要生成多个 curl 进程,我如何从命令行或 shell 函数中执行此操作?例如:

$ multiCurl <download 1> <download 2> <download 3>

multiCurl () {
  curl <download 1>
  curl <download 2>
  curl <download 3>
}

或者

for link in $(cat download.list); do
  curl <link 1>
  curl <link 2>
  curl <link 3>
  curl <link 4>
done

答案1

也许您可以使用命令parallel同时下载多个文件。

在这里我假设你保留原始文件名

#!/usr/bin/env bash

funcDownloadOperation(){
    link="${1:-}"
    curl -fsSL -O "${link}"
    if [[ -s "${link##*/}" ]]; then
        echo "file ${link##*/} download successfully!"
    else
        echo "fail to download link ${link}"
    fi
}

export -f funcDownloadOperation
cat download.list | parallel -k -j 0 funcDownloadOperation

您需要parallel在您的 Linux 系统中手动安装实用程序。

答案2

&只需在每个命令末尾添加即可使其在后台执行:

curl <link 1>&

归根结底,这取决于您是否还想知道这些命令何时结束以及它们的返回代码是什么。如果是这样,您可以尝试以下方法:

set -a pids # Array of the process ids of background commands
for url in $whatever_the_list_of_urls 
do
    curl $url&  # start CURL in background
    pids[${#pids[*]}]=$! # remember PID 
done

# all started, now wait for them
for pid in ${pids[*]}
do
    wait $pid 
    print "Sensed end of $pid, rc:=$?"
done

相关内容