cURL - 下载多个文件并指定输出名称

cURL - 下载多个文件并指定输出名称

我有一系列 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

相关内容