У меня есть файл журнала команды rsync с прогрессом. При запуске этот прогресс обновляет отображаемую информацию в той же строке. Когда я фиксирую вывод этой команды, я получаю файл, который обычно отображается с cat
на терминале (все пробелы и повторные правки воспроизводятся), но я хочу иметь возможность использовать grep
в файле и обрабатывать его, чтобы я видел все команды редактирования backspace. Как я могу обработать файл, чтобы удалить все обновления прогресса и просто получить файл с окончательными правками?
Как я могу отобразить ход rsync из файла журнала без возврата каретки?
Ответы (2)
Если вы хотите увидеть, как выглядит ваш захваченный файл без перезаписи предыдущих строк прогресса:
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
--log-file
arg был тем, что мне было нужно здесь
- person lunguini; 08.02.2019
Во-первых, я предполагаю, что индикаторы прогресса важны для вас по разным причинам, потому что самое простое решение — просто отключить их. Во-вторых, я предполагаю, что нет способа заставить rsync записывать журнал со всем, кроме индикаторов прогресса, в отдельный файл из того, что он показывает на экране. Наконец, я предполагаю, что вам вообще не нужны какие-либо индикаторы прогресса в файле журнала, который вы позже обрабатываете с помощью других инструментов.
Принимая во внимание эти два предположения, вы можете убрать индикаторы выполнения, просматривая каждую строку на наличие символов \b или \r и отбрасывая все строки, в которых есть эти символы. Это может быть так же просто, как командная строка grep, которая выглядит так:
grep -ve "$(echo -ne '[\b\r]')" logfile
Это предполагает, что у вас есть оболочка, поддерживающая подстановку аргументов в стиле "$(...)"
, и команда echo, поддерживающая аргументы -e
.
echo
: grep -v $'[\b\r]' logfile
, но это и ваша команда полностью исключат строки прогресса, а не то, что, как я думаю, хочет ОП.
- person Dennis Williamson; 02.11.2009