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

3 unix shell logging rsync

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

Pau*_*ce. 5

如果您想查看捕获的文件的样子,而没有进度线覆盖以前的进度线:

sed 's/\r/\n/g' capture-file
Run Code Online (Sandbox Code Playgroud)

这可能会产生这样的结果:

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
Run Code Online (Sandbox Code Playgroud)

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

sed 's/.*\r/\n/g' capture-file
Run Code Online (Sandbox Code Playgroud)

可能看起来像这样:

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
Run Code Online (Sandbox Code Playgroud)

您可以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
Run Code Online (Sandbox Code Playgroud)