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?

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.


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.


¿Esto realmente funciona? Ambos echo "hello" | tar czvf foo.tar.gzy echo "hello" | tar czv > foo.tar.gzfallan para mí.
425nesp
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.