我正在尝试在我正在开发的脚本中使用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。
答案 0 :(得分:0)
通过使用 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的第二个参数。现在,这是从Web下载任意文件的示例:
$ ./curl-progress -so "file1.zip" "http://download.thinkbroadband.com/20MB.zip"
我仍然需要发送curl-progress脚本的副本,但最好还是要求用户先安装wget。
答案 1 :(得分:0)
对于使用 curl 仅下载 1 个文件(如本线程示例中给出的文件)的特殊情况,我们可以使用这个 liner 函数。
# Usage : curlp URL
curlp(){ f=${1##*/};printf "%28s%s" "" $f;COLUMNS=27 curl -# $1 -o $f ; }
它提供了一个带有 20 # 的进度条(即每 5% 进度一个 #)。您确实可以修改它以添加更多选项,可能是 2 个参数,一个是 URL,第二个可能是本地名称,等等...