![方法: cURL の同時ダウンロード?](https://rvso.com/image/1539560/%E6%96%B9%E6%B3%95%3A%20cURL%20%E3%81%AE%E5%90%8C%E6%99%82%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%3F.png)
curl を使用して複数のファイルを同時にダウンロードするにはどうすればよいでしょうか? 複数の curl プロセスを生成する必要がある場合でも、コマンド ラインまたはシェル関数からそれを実行するにはどうすればよいですか? たとえば、次のようになります。
$ 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