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

标签 macos bash curl progress-bar wget

我正在尝试在我正在开发的脚本中使用 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"

这是输出: Output

我仍然需要随附一份 curl-progress 脚本的副本,但这比要求用户先安装 wget 要好。

关于macos - 是否可以将 curl 设置为在进度条之前显示文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240930/

相关文章:

php - 为 cURL 的内容创建容器

php - 使用 PHP cURL 固定证书

ios - didReadRSSI 在 iOS 上调用但在 OS X 上不调用

linux - ssh key 不适用于 linux 主机

Bash脚本,while循环中的多个条件

linux - 如果未禁用,则禁用它并再次选择启用

ubuntu - 如何使用 curl 从 ElasticSearch 中删除所有日志数据?

macos - OS X 自动布局可防止调整窗口大小

macos - 在 Mac OS 上从已清除的终端恢复内容

linux - 简单的 bash 命令失败,无法执行二进制文件