我有一系列 URL,范围是{}
。我可以在 bash 中使用 cURL 下载它们,但输出存在问题。我可以使用 #1,但我需要使用不同名称命名的文件(我已将这些名称存储在数组中)。如何更改多个文件的输出名称?
我曾尝试逐个文件下载,但是这比多个下载慢约 40%。
答案1
您可以遍历两个数组,一个包含要下载的 URL,另一个包含所需的文件名,启动并行运行的子进程来下载文件。
#!/bin/sh
# array of URLs
urls=( http://www.example.com/file1.zip http://www.example.com/file2.zip http://www.example.com/file3.zip )
# names of downloaded files
names=( myname1.zip myname2.zip myname3.zip )
for ((i = 0; i < ${#urls[@]}; ++i)); do
printf "Launching subprocess to DL %s to %s\n" "${urls[i]}" "${names[i]}"
curl -s -o "${names[i]}" "${urls[i]}" &
done
或者,如果您希望它类似于使用 {} w/ curl,请尝试类似的操作:
#!/bin/sh
# desired filenames
names=( myname0.zip myname1.zip myname2.zip )
for (( i = 0; i < ${#names[@]}; ++i )); do
printf "Launching subprocess to DL http://example.com/file%s.zip to %s\n" "$i" "${names[i]}"
curl -s -o "${names[i]}" http://example.com/file"$i".zip &
done