3

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

4

2 回答 2

6

如果您想查看捕获的文件的外观,而进度线不会覆盖之前的文件:

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选项运行。将“名称”替换为您想要的名称。您可以使用该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
于 2009-11-01T23:30:49.053 回答
0

首先,我猜由于各种原因,进度指标对您来说很重要,因为最简单的解决方案就是关闭它们。其次,我假设没有办法告诉 rsync 将除进度指示器之外的所有内容都写到与屏幕上显示的文件不同的文件中。最后,我假设您在稍后使用其他工具处理的日志文件中根本不想要任何进度指示器内容。

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

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

这假定您有一个支持"$(...)"样式参数替换的 shell 和一个支持参数的 echo 命令-e

于 2009-11-01T22:40:51.870 回答