Tuyauterie dans et hors de goudron et gzip

11

J'essaie de comprendre comment diriger une commande vers quelque chose comme gzip, cpio ou tar.

Les commandes en question appartiennent au système ZFS. J'utilise ZFS sur Ubuntu Linux 10.04.3.

Les commandes avec lesquelles je travaille sont:

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

Je comprends ces parties.

Mais ma première question est, que ferais-je pour diriger dans tar + gzip?

Cette?

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

Et mon autre question est de savoir comment extraire les données de l'archive tar ou de gzip?

Je dois utiliser zfs recieve media/mypictures@20070607 < ~/backups/20070607

Alors, serait-ce juste si j'utilisais du goudron?

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

Une idée?

ianc1215
la source

Réponses:

10

tars'attend à recevoir une liste de noms de fichiers comme arguments de ligne de commande. Pour autant que je sache, il ne peut pas être utilisé pour lire un pipeline anonyme (que stockerait-il en tant que nom de fichier et métadonnées de fichier?)

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

Si vos données sont un élément ou un flux logique unique, il n'est pas nécessaire d'utiliser quelque chose comme tar, qui est utilisé pour regrouper un ensemble de fichiers distincts.

Sinon, vous devrez d'abord écrire les données dans un fichier, tarer le fichier, puis supprimer le fichier.

RedGrittyBrick
la source
Vraiment? Je pensais que le tar n'était qu'une autre forme de compression. Alors sautez le goudron et juste le gzip?
ianc1215
3
Oui, utilisez simplementzfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz
RedGrittyBrick
2
Tar N'ATTEND PAS une liste de noms de fichiers sauf si vous spécifiez l' -foption (tar accepte également fsans le "-").
drevicko
1
@drevicko: Le contexte de la question est la création d'une archive tar. La liste des fichiers que je veux dire est la liste des fichiers (et / ou répertoires) à inclure dans l'archive écrite. Par exemple: cd /etc; TAPE=/tmp/rgb.tar tar c hosts passwdoù se trouve la liste des fichiershosts passwd
RedGrittyBrick
2
@RedGrittyBrick mais le contexte de la question est de tar à partir d'un tube, c'est-à-dire: pas de liste de fichiers. Dire que tar attend une liste de fichiers n'est pas vrai. Le problème est qu'il attend un nom de fichier de sortie (unique) lorsque l'OP le spécifie f, et il ne l'a pas fourni.
drevicko
10

L' -foption spécifie un fichier, sinon la sortie va à stdout. Donc, soit abandonnez la redirection:

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

Ou laissez tomber l' foption:

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

De même avec untarring.

Piskvor a quitté le bâtiment
la source
Est-ce que cela fonctionne réellement? Les deux echo "hello" | tar czvf foo.tar.gzet echo "hello" | tar czv > foo.tar.gzéchouent pour moi.
425nesp