将wget输出覆盖到文本文件

时间:2013-11-12 15:08:15

标签: linux bash command-line-interface sh wget

我正在尝试将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%),这样我就可以只读取文件并定期检查文件进度以达到前端目的。

1 个答案:

答案 0 :(得分:0)

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

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

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

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