Filtrando saída de erro padrão do repositório remoto do BorgBackup

0

Eu quero filtrar erro padrão para um comando que imprime informações de status para erro padrão. Nesse caso, Borg Backup . Especificamente, a saída padrão de borg check inclui linhas como:

Checking segments ...

enviado para erro padrão. Eu quero filtrar essas linhas, porque eles são um incômodo para um trabalho cron. Atualmente (a partir de 1.0.2 ) não é possível desativar esta saída via configuração borg .

Eu usei a abordagem descrita por Gilles . Isso funciona bem para um repositório Borg local, por exemplo:

{ borg check '/media/faheem/My Passport/backup-Mail' 2>&1 1>&3 | tr '\r' '\n' | grep -v "^Checking segments" 1>&2; } 3>&1

No entanto, a situação é um pouco diferente para um repositório remoto. A saída parece

Remote: Checking segments 99.3% 
Remote:

Como alguém poderia modificar o grep reverso para se livrar de ambos os casos?

{ borg check faheem@ramnode:/mnt/backup-Mail 2>&1 1>&3 | tr '\r' '\n' | grep -v ":Checking segments" 1>&2; } 3>&1

funciona para o primeiro caso, mas não para o segundo, apenas Remote: . Eu poderia usar dois greps, mas prefiro uma expressão.

    
por Faheem Mitha 30.04.2016 / 02:19

1 resposta

1

Para filtrar uma mensagem em um grep, insira o sinalizador de expressão regular estendida -E (para o significado "zero ou uma vez" de ? abaixo) e a correspondência inversa -v :

grep -Ev '^Remote:( Checking segments [[:digit:]]{1,3}\.[[:digit:]]%)?$'

que diz que as linhas devem (inversamente) corresponder:

  • início da linha ^
  • a string Remote:
  • o grupo ( ... ) agrupado de caracteres (com espaço à esquerda) Checking segments ... , correspondido com zero ou uma vez com: ?
  • a seção [[:digit:]] diz para corresponder entre 1 e 3 dígitos, seguido por um ponto, seguido por um dígito e, em seguida, o símbolo %
  • todos ancorados no final da linha $

Após mais esclarecimentos do OP, o grep final se parece com:

grep -Ev "^Remote:\s*(Checking segments.*)?$"

O que remove qualquer correspondência de linha (começando no início ^ da linha), a palavra "Remoto:" e, em seguida, qualquer (ou nenhuma) quantidade de espaço em branco, então:

  • nada ou

  • a frase "Verificando os segmentos", seguida por qualquer (ou nenhum) caractere .*

... e depois o fim da linha $

    
por 01.05.2016 / 02:02