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