如何在没有回车符的情况下从日志文件中显示rsync进度?

时间:2009-11-01 22:31:04

标签: unix shell logging rsync

我有rsync命令的日志文件,但是有进展。运行此进度时,更新同一行上的显示信息。当我从此命令捕获输出时,我得到一个在终端上正常显示cat的文件(所有退格和重新编辑都被重播)但我希望能够使用grep文件并处理它,所以我看到所有退格编辑命令。如何处理文件以删除所有进度更新,并获取具有最终编辑的文件?

2 个答案:

答案 0 :(得分:4)

如果你想看看你的捕获文件是什么样的,没有进度线覆盖以前的文件:

sed 's/\r/\n/g' capture-file

可能会产生这样的结果:

created directory /some/dest/dir
filename

       32768   0%    0.00kB/s    0:00:00
     6717440  21%    6.38MB/s    0:00:03
    13139968  41%    6.25MB/s    0:00:02
    19791872  62%    6.28MB/s    0:00:01
    26214400  82%    6.24MB/s    0:00:00
    31784420 100%    6.25MB/s    0:00:04 (xfer#1, to-check=0/1)

sent 31788388 bytes  received 31 bytes  3346149.37 bytes/sec
total size is 31784420  speedup is 1.00

如果您只想查看进度消息的最后一步并取消之前的步骤:

sed 's/.*\r/\n/g' capture-file

可能如下所示:

created directory /some/dest/dir
filename

    31784420 100%    6.25MB/s    0:00:04 (xfer#1, to-check=0/1)

sent 31788388 bytes  received 31 bytes  3346149.37 bytes/sec
total size is 31784420  speedup is 1.00

您可以使用rsync选项运行--log-file=name以捕获文件中的日志信息。将“name”替换为您想要的名称。您可以使用log-file-format选项控制记录的信息(有关详细信息,请参阅man rsyncd.conf中的日志格式部分)。

在我的系统上,默认的rsync日志文件如下所示:

2009/11/01 17:19:20 [23802] building file list
2009/11/01 17:19:20 [23802] created directory /some/dest/dir
2009/11/01 17:19:25 [23802] <f+++++++++ filename
2009/11/01 17:19:25 [23802] sent 31788388 bytes  received 31 bytes  3346149.37 bytes/sec
2009/11/01 17:19:25 [23802] total size is 31784420  speedup is 1.00

答案 1 :(得分:0)

首先,我猜测进度指标对于您保持各种原因很重要,因为最简单的解决方案就是关闭它们。其次,我假设没有办法告诉rsync将除了进度指示器之外的所有内容写入一个日志,而不是它在屏幕上显示的文件。最后,我假设您不希望日志文件中存在任何进度指示器,您稍后会使用其他工具进行处理。

鉴于这两个假设,您可以通过基本查看\ b或\ r \ n字符的每一行并抛出具有这些字符的所有行来去除进度指示器。这可以像grep命令行一样简单,如下所示:

grep -ve "$(echo -ne '[\b\r]')" logfile

这预示着你有一个支持"$(...)"样式参数替换的shell和一个支持-e参数的echo命令。