Tubería dentro y fuera de alquitrán y gzip

11

Estoy tratando de entender cómo canalizar un comando a algo como gzip, cpio o tar.

Los comandos en cuestión pertenecen al sistema ZFS. Estoy ejecutando ZFS en Ubuntu Linux 10.04.3.

Los comandos con los que estoy trabajando son;

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

Estas partes las entiendo.

Pero mi primera pregunta es, ¿qué haría para canalizar en tar + gzip?

¿Esta?

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

Y mi otra pregunta es ¿cómo sacaría los datos del tarball o gzip?

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

Entonces, ¿sería esto si estuviera usando tar?

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

¿Alguna idea?

ianc1215
fuente

Respuestas:

10

tarespera recibir una lista de nombres de archivo como argumentos de línea de comando. Hasta donde sé, no se puede usar para leer una canalización anónima (¿qué almacenaría como nombre de archivo y metadatos de archivo?)

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

Si sus datos son un solo elemento lógico o secuencia, no hay necesidad de usar algo como tar, que se usa para agrupar un conjunto de archivos separados.

De lo contrario, primero deberá escribir los datos en un archivo, tar el archivo y luego eliminar el archivo.

RedGrittyBrick
fuente
De Verdad? Pensé que el alquitrán era solo otra forma de compresión. Entonces, ¿saltear el alquitrán y solo gzip?
ianc1215
3
Sí, solo usezfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz
RedGrittyBrick
2
Tar NO ESPERA una lista de nombres de archivos a menos que especifique la -fopción (tar también acepta fsin el "-").
drevicko
1
@drevicko: El contexto de la pregunta es crear un archivo tar. La lista de archivos que quiero decir es la lista de archivos (y / o directorios) que se incluirán en el archivo escrito. Por ejemplo: cd /etc; TAPE=/tmp/rgb.tar tar c hosts passwddonde está la lista de archivoshosts passwd
RedGrittyBrick
2
@RedGrittyBrick, pero el contexto de la pregunta es tar desde una tubería, es decir: no hay una lista de archivos. Decir tar espera una lista de archivos no es cierto. El problema es que espera un nombre de archivo de salida (único) cuando el OP lo especifica f, y no lo proporcionó.
drevicko
10

La -fopción especifica un archivo, de lo contrario la salida va a stdout. Entonces, suelte la redirección:

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

O suelte la fopción:

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

Del mismo modo con untarring.

Piskvor salió del edificio
fuente
¿Esto realmente funciona? Ambos echo "hello" | tar czvf foo.tar.gzy echo "hello" | tar czv > foo.tar.gzfallan para mí.
425nesp