我正在尝试将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%
),这样我就可以只读取文件并定期检查文件进度以达到前端目的。
答案 0 :(得分:0)
wget
(和许多其他命令行工具)使用shell转义序列来显示它们的进度。
这意味着他们打印“0%”,然后做一些事情,然后告诉终端“用'5%'覆盖'0%'”,等等。
将输出重定向到文件时,会看到这些“覆盖”代码。
使用--progress=dot
应解决此问题;然后你没有看到任何百分比(也没有任何擦除代码)。相反,它会在每1K下载时打印一个点,你必须计算点数。