Как я могу отобразить прогресс rsync из файла журнала без возврата каретки? - PullRequest
2 голосов
/ 02 ноября 2009

У меня есть файл журнала от команды rsync с прогрессом. При выполнении этого процесса обновления отображают информацию в той же строке. Когда я получаю выходные данные этой команды, я получаю файл, который обычно отображается с cat на терминале (все обратные и повторные изменения воспроизводятся), но я хочу иметь возможность использовать grep для файла и обрабатывать его поэтому я вижу все команды редактирования Backspace. Как я могу обработать файл, чтобы удалить все обновления прогресса и просто получить файл с окончательными изменениями?

Ответы [ 2 ]

4 голосов
/ 02 ноября 2009

Если вы хотите увидеть, как выглядит ваш захваченный файл без строк прогресса, перезаписывающих предыдущие:

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
0 голосов
/ 02 ноября 2009

Во-первых, я предполагаю, что показатели прогресса важны для вас по разным причинам, потому что самое простое решение - просто отключить их. Во-вторых, я предполагаю, что нет способа заставить rsync записывать журнал со всем, кроме индикаторов прогресса, в отдельный файл, который не отображается на экране. Наконец, я предполагаю, что вам вообще не нужно ничего из индикатора прогресса в файле журнала, который вы позже обрабатываете другими инструментами.

Учитывая эти два допущения, вы можете вырезать индикаторы прогресса, в основном просматривая каждую строку на наличие символов \ b или \ r и подбрасывая все строки, содержащие эти символы. Это может быть так же просто, как командная строка grep, которая выглядит следующим образом:

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

Это предполагает, что у вас есть оболочка, которая поддерживает подстановку аргументов в стиле "$(...)", и команда echo, которая поддерживает аргументы -e.

...