Entrando e saindo de tar e gzip

9

Estou tentando entender como canalizar de um comando para algo como gzip, cpio ou tar.

Os comandos em questão pertencem ao sistema ZFS. Estou executando o ZFS no Ubuntu Linux 10.04.3.

Os comandos com os quais estou trabalhando são

To create a snapshot;
zfs snapshot media/mypictures@20070607

To copy the snapshot to a directory;
zfs send media/mypictures@20070607 > ~/backups/20070607

Then I can also pipe into gzip
zfs send media/mypictures@20070607 | gzip > ~/backups/20070607.gz

Essas partes eu entendo.

Mas minha primeira pergunta é: o que eu faria para canalizar para tar + gzip?

Isso?

zfs send media/mypictures@20070607 | tar czvf > ~/backups/20070607.tar.gz

E minha outra pergunta é como eu poderia obter os dados do tarball ou do gzip?

Eu tenho que usar zfs recieve media/mypictures@20070607 < ~/backups/20070607

Então, seria apenas isso se eu estivesse usando alcatrão?

zfs recieve media/mypictures@20070607 | tar xzvf < ~/backups/20070607.tar.gz

Alguma ideia?

    
por ianc1215 21.09.2011 / 06:24

2 respostas

8

tar espera receber uma lista de nomes de arquivos como argumentos de linha de comando. Até onde sei, não pode ser usado para ler um pipeline anônimo (o que ele armazenaria como nome de arquivo e metadados de arquivo?)

$ echo aaa | tar cv > f.tar
tar: Cowardly refusing to create an empty archive
Try 'tar --help' for more information.

Se os seus dados forem um único item ou fluxo lógico, não há necessidade de usar algo como o tar, que é usado para agrupar um conjunto de arquivos separados.

Caso contrário, você terá que gravar os dados em um arquivo primeiro, tar o arquivo e, em seguida, excluir o arquivo.

    
por 21.09.2011 / 10:55
9

A opção -f especifica um arquivo, senão a saída vai para stdout. Então, solte o redirecionamento:

zfs send media/mypictures@20070607 | tar czvf ~/backups/20070607.tar.gz

Ou elimine a opção f :

zfs send media/mypictures@20070607 | tar czv > ~/backups/20070607.tar.gz

Similarmente com untarring.

    
por 21.09.2011 / 08:23