Tubazioni in entrata e in uscita di catrame e gzip


11

Sto cercando di capire come convogliare un comando in qualcosa come gzip, cpio o tar.

I comandi in questione appartengono al sistema ZFS. Sto eseguendo ZFS su Ubuntu Linux 10.04.3.

I comandi con cui lavoro sono;

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

Queste parti ho capito.

Ma la mia prima domanda è: cosa farei per convogliare tar + gzip?

Questo?

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

E la mia altra domanda è: come potrei ottenere i dati dal tarball o gzip?

Devo usare zfs recieve media/mypictures@20070607 < ~/backups/20070607

Quindi sarebbe solo se stavo usando tar?

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

Qualche idea?

Risposte:


10

tarprevede di ricevere un elenco di nomi di file come argomenti della riga di comando. Per quanto ne so, non può essere utilizzato per leggere una pipeline anonima (cosa memorizzerebbe come nome file e metadati del file?)

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

Se i tuoi dati sono un singolo elemento logico o flusso, non è necessario utilizzare qualcosa come tar, che viene utilizzato per raggruppare un insieme di file separati.

Altrimenti dovrai prima scrivere i dati in un file, tar il file, quindi eliminare il file.


Veramente? Pensavo che il tar fosse solo un'altra forma di compressione. Quindi salta tar e basta gzip?
ianc1215,

3
Sì, basta usarezfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz
RedGrittyBrick il

2
Tar NON si aspetta un elenco di nomi di file a meno che non specifichi l' -fopzione (tar accetta anche fsenza "-").
drevicko,

1
@drevicko: il contesto della domanda sta creando un archivio tar. L'elenco dei file intendo è l'elenco dei file (e / o directory) da includere nell'archivio scritto. Ad esempio: cd /etc; TAPE=/tmp/rgb.tar tar c hosts passwddove si trova l'elenco dei filehosts passwd
RedGrittyBrick

2
@RedGrittyBrick ma il contesto della domanda è tar da una pipe, ovvero: nessun elenco di file. Dire che tar si aspetta un elenco di file non è vero. Il problema è che si aspetta un (singolo) nome del file di output quando l'OP specifica fe non lo ha fornito.
drevicko,

10

L' -fopzione specifica un file, altrimenti l'output passa a stdout. Quindi, rilasciare il reindirizzamento:

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

Oppure rilascia l' fopzione:

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

Allo stesso modo con untarring.


Funziona davvero? Entrambi echo "hello" | tar czvf foo.tar.gze echo "hello" | tar czv > foo.tar.gzfalliscono per me.
425 gennaio
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.