0

我正在尝试将wget命令的过滤输出写入文件,但它总是附加到文本文件并显示一些无法识别的字符。

以下脚本将在 CLI 上很好地输出 1% 、 2% 等,但是当我将输出重定向到文本文件时,它会显示一些连线字符并且全部被附加而不是被覆盖。

#!/bin/sh
download()
{
    local url=$1
    wget --progress=dot $url 2>&1 | grep --line-buffered "%" | \
        sed -u -e "s,\.,,g" | awk '{printf("\b\b\b\b%4s", $2)}'
    echo " DONE"
}

file="$1"
echo -n "Downloading $file:"
download "$file" > file.log

我尝试使用>将不起作用,我在哪里做错了?

这是我在文件中找到的。

  1%  2%  3%  5%  6%  7%  9% 9% 10% 11% 13% 13% 13% 14%

但应该是

14%

只是目前的进展。

我要做的就是写入当前文件进度(如10%),这样我就可以读取文件并定期检查文件进度以用于前端目的。

4

1 回答 1

0

wget(以及许多其他命令行工具)使用 shell 转义序列来显示它们的进度。

这意味着他们打印“0%”,然后做一些事情,然后告诉终端“用'5%'覆盖'0%'”,等等。

当您将输出重定向到文件时,您会看到这些“覆盖”代码。

使用--progress=dot应该可以解决这个问题;然后你看不到任何百分比(也没有任何擦除代码)。相反,它会每下载 1K 打印一个点,您必须计算点数。

于 2013-11-12T15:12:53.093 回答