我试图在我正在开发的脚本中使用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,并且将要求任何使用我的脚本的人首先使用端口或其他不方便的方法安装wget。
发布于 2015-12-12 19:15:56
我找到了一种解决这个问题的好方法,方法是在这里使用curl进度脚本(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的第二个论点--进步。下面是一个从web下载任意文件的示例:
$ ./curl-progress -so "file1.zip" "http://download.thinkbroadband.com/20MB.zip"这是输出:

我仍然需要随我一起发送一份curl进度脚本的副本,但这比要求用户先安装wget好。
发布于 2021-03-06 10:03:15
对于使用curl只下载一个文件的特殊情况,如本线程中的示例所示,我们可以使用这个线型函数。
# Usage : curlp URL
curlp(){ f=${1##*/};printf "%28s%s" "" $f;COLUMNS=27 curl -# $1 -o $f ; }它提供了一个20 #的进度条(即每5%的进度)。您确实可以黑它来添加更多的选项,可能是2个args,一个是URL,第二个可以是本地名称,等等。
https://stackoverflow.com/questions/34240930
复制相似问题