首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将curl设置为在进度栏之前显示文件名?

是否可以将curl设置为在进度栏之前显示文件名?
EN

Stack Overflow用户
提问于 2015-12-12 14:25:57
回答 2查看 1.6K关注 0票数 3

我试图在我正在开发的脚本中使用curl来下载大量文件。我使用带卷曲的-#开关来强制显示进度条,而不是不感兴趣的全部细节。但是,输出看起来是这样的:

代码语言:javascript
复制
######################################################################## 100.0%
######################################################################## 100.0%
######################################################################## 100.0%

这完全不是描述性的,我想在任何下载之前添加一行,以显示将要下载的内容,但我不喜欢结果。我在问是否有办法让curl输出类似wget的内容:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-12 19:15:56

我找到了一种解决这个问题的好方法,方法是在这里使用curl进度脚本(https://gist.github.com/sstephenson/4587282),它用自定义绘制的进度条包装curl。

默认情况下,脚本curl-progress不会在进度栏前面显示文件名,但它完全是可定制的。我必须修改print_progress函数,以便它使用一个额外的参数,即要下载的文件的名称。为此,我在print_progress中修改了printf语句,以便在进度条之前的适当位置打印文件名:

代码语言:javascript
复制
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的调用,以发送第三个参数:

代码语言:javascript
复制
print_progress "$bytes" "$length" "$2"

其中$2指的是发送给curl的第二个论点--进步。下面是一个从web下载任意文件的示例:

代码语言:javascript
复制
$ ./curl-progress -so "file1.zip" "http://download.thinkbroadband.com/20MB.zip"

这是输出:

我仍然需要随我一起发送一份curl进度脚本的副本,但这比要求用户先安装wget好。

票数 2
EN

Stack Overflow用户

发布于 2021-03-06 10:03:15

对于使用curl只下载一个文件的特殊情况,如本线程中的示例所示,我们可以使用这个线型函数。

代码语言:javascript
复制
# Usage : curlp URL
curlp(){ f=${1##*/};printf "%28s%s" "" $f;COLUMNS=27 curl -# $1 -o $f ; }

它提供了一个20 #的进度条(即每5%的进度)。您确实可以黑它来添加更多的选项,可能是2个args,一个是URL,第二个可以是本地名称,等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34240930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档