如何使用 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