Como canalizar o stdout para um arquivo se o comando atual já estiver sendo canalizado através do gzip

3

Então, eu tenho esse comando que preciso executar e, em seguida, ignorar:

innobackupex-1.5.1 --user=root --password=**** --stream=tar ./ | gzip - > /data/myfile.tar.gz

Como canalizar qualquer saída para um arquivo?

adicionando outro > > ao final deste comando apenas anexa os dados gzip.

para ser mais específico; innobackupex tem saída de progresso - eu quero esta saída anexada / canalizada para um arquivo (não apenas erros). A maneira normal de fazer isso (adicionando > >) não funcionará nesse caso devido ao gzip já estar canalizando

    
por Tom G11 29.01.2013 / 20:18

4 respostas

4

innobackupex não exibe seu progresso em stdout , caso contrário, ele será exibido no arquivo tar.gz . O mais provável é que saia para stderr (uma rápida olhada no script parece confirmá-lo), então o que você precisa fazer é redirecionar seu stderr:

innobackupex ... 2>> progress.log | gzip > file.tar.gz
    
por 29.01.2013 / 21:52
0

Você quer capturar o STDERR do innobackupex? Sua pergunta não está muito clara.

innobackupex-1.5.1 --user=root --password=**** --stream=tar ./ 2> /path/to/file | gzip - > ... 
    
por 29.01.2013 / 20:41
0

Eu faria isso executando esses comandos em um subshell

( innobackupex-1.5.1 --user=root --password=**** --stream=tar ./ \
   | gzip - >  /data/myfile.tar.gz ) 2> errors
    
por 29.01.2013 / 20:43
0

1) Se você quer dizer, você quer canalizar a saída para o gzip para compressão e um arquivo regular, aqui está um exemplo de tee usage:

ls -a ~ | tee ls.txt - | grep "^\."

Isso imprimirá todos os arquivos de ponto "ocultos" em seu diretório pessoal (por causa do grep), mas a saída inteira de ls -a estará em ls.txt.

Veja man tee para uma explicação completa.

2) Se você quer dizer que deseja incluir o fluxo de erro padrão no fluxo de saída padrão, anexe 2>&1 ao comando.

    
por 29.01.2013 / 21:03