A saída de tar cvf -
é o arquivo. Ao especificar -
como o argumento para f
, você está informando tar
para gerar o arquivamento no stdout (e, nesse caso, devido ao% stdout, |gzip
, tar
é um canal para gzip
).
A saída v
erbose (a lista de arquivos) que você pediu com v
passa a ser como mensagens de erro porque não pode continuar no stdout, pois isso iria para gzip
e para o tar.gz
Arquivo. Observe também que seu 2> error.log
apenas redireciona gzip
' stderr
.
Se você não quiser a lista detalhada de arquivos (o que eu suponho que você quer dizer com output ), apenas omita o v
. E redirecione um sub-grupo ou stderr
do grupo de comandos se desejar que as mensagens de erro de cd
, tar
e gzip
(e a abertura do shell do arquivo de saída) sejam enviadas para o arquivo de log:
(cd /ebs/datatop &&
tar cf - . | gzip > /ebs/backup/proddata.tar.gz) 2>> error.log
Também substituí *
por .
para arquivar o diretório atual. *
seria apenas expandido para os arquivos não ocultos e causaria problemas em alguns nomes de arquivos.
O error.log
será armazenado no diretório de trabalho atual antes desse cd
. Na sua abordagem, esse error.log
teria sido armazenado no arquivo tar.gz
.
Se você quisesse redirecionar essa lista de arquivos (com v
ou vv
) para algum arquivo, e os erros para algum outro arquivo, você precisaria usar um argumento diferente de -
para o f
flag. Por exemplo, usando esta sintaxe em sistemas com suporte para /dev/fd/n
:
(tar cvvf /dev/fd/3 . 3>&1 > ../file.list | gzip > ../file.tar.gz) 2> ../error.log
Acima, /dev/fd/3
ainda se refere ao canal para gzip
(já que cuidamos de redirecionar o descritor de arquivo 3 para ele (com 3>&1
) antes de redirecionar o stdout para ../file.list
), mas já que não está mais dizendo tar
para enviar o arquivo em seu stdout, tar
está livre para escrever a lista de arquivos em stdout (que nós redirecionamos para ../file.list
).