我正在尝试在我正在开发的脚本中使用 curl,该脚本将下载一堆文件。我使用带有 curl 的 -#
开关来强制显示进度条,而不是不感兴趣的完整细节。但是,输出看起来像这样:
######################################################################## 100.0%
######################################################################## 100.0%
######################################################################## 100.0%
这根本不是描述性的,我想在任何下载之前添加一行来显示将要下载的内容,但我不喜欢这个结果。我在问是否有办法让 curl 输出类似于我们从 wget 得到的东西:
file1.zip 100%[=============================>] 33.05K --.-KB/s in 0.1s
file2.zip 100%[=============================>] 46.26K --.-KB/s in 0.1s
file3.zip 100%[=============================>] 19.46K --.-KB/s in 0.1s
不过,我不想改用 wget,因为默认情况下它不适用于 OS X,并且需要使用我的脚本的任何人首先使用端口或其他不方便的方法安装 wget。
最佳答案
我找到了解决此问题的好方法,方法是在此处使用 curl-progress 脚本 ( https://gist.github.com/sstephenson/4587282 ),该脚本使用自定义绘制的进度条包装 curl。
默认情况下,脚本 curl-progress 不会在进度条前面显示文件名,但它是完全可定制的。我不得不修改 print_progress 函数,以便它使用一个额外的参数,即要下载的文件的名称。因此,我修改了 print_progress 中的 printf 语句,使其在进度条之前的适当位置打印文件名:
print_progress() {
local bytes="$1"
local length="$2"
local fileName="$3" # I added this third variable
...
...
printf "\x1B[0G %-10s%-6s\x1B[7m%*s\x1B[0m%*s\x1B[1D" \
"$fileName" "${percent}%" "$on" "" "$off" "" >&4
}
现在 print_progress 方法需要三个参数,为此我修改了对 print_progress 的调用以发送第三个参数:
print_progress "$bytes" "$length" "$2"
其中 $2 指的是发送到 curl-progress 的第二个参数。现在这是一个从网络上下载任意文件的例子:
$ ./curl-progress -so "file1.zip" "http://download.thinkbroadband.com/20MB.zip"
我仍然需要随附一份 curl-progress 脚本的副本,但这比要求用户先安装 wget 要好。
关于macos - 是否可以将 curl 设置为在进度条之前显示文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240930/