Perpipaan masuk dan keluar dari tar dan gzip

11

Saya mencoba untuk mendapatkan pegangan tentang cara menyalurkan dari perintah ke sesuatu seperti gzip, cpio atau tar.

Perintah yang dipermasalahkan milik sistem ZFS. Saya menjalankan ZFS di Ubuntu Linux 10.04.3.

Perintah yang saya kerjakan adalah;

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

Bagian-bagian ini saya mengerti.

Tapi pertanyaan pertama saya adalah, apa yang akan saya lakukan untuk memasang tar + gzip?

Ini?

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

Dan pertanyaan saya yang lain adalah bagaimana cara saya mendapatkan data dari tarball atau gzip?

Saya harus menggunakan zfs recieve media/mypictures@20070607 < ~/backups/20070607

Jadi apakah ini hanya jika saya menggunakan tar?

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

Ada ide?

ianc1215
sumber

Jawaban:

10

tarmengharapkan akan diberikan daftar nama file sebagai argumen baris perintah. Sejauh yang saya tahu, itu tidak dapat digunakan untuk membaca pipa anonim (apa yang akan disimpan sebagai nama file dan file-metadata?)

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

Jika data Anda adalah item atau aliran logis tunggal, tidak perlu menggunakan sesuatu seperti tar, yang digunakan untuk mengelompokkan satu set file terpisah.

Kalau tidak, Anda harus menulis data ke file terlebih dahulu, tar file, lalu hapus file.

RedGrittyBrick
sumber
Betulkah? Saya pikir tar hanyalah bentuk kompresi. Jadi lewati tar dan gzip saja?
ianc1215
3
Ya, gunakan sajazfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz
RedGrittyBrick
2
Tar TIDAK mengharapkan daftar nama file kecuali jika Anda menentukan -fpilihannya (tar juga menerima ftanpa "-").
drevicko
1
@drevicko: Konteks pertanyaannya adalah membuat arsip tar. Daftar file yang saya maksud adalah daftar file (dan / atau direktori) untuk dimasukkan dalam arsip tertulis. Sebagai contoh: di cd /etc; TAPE=/tmp/rgb.tar tar c hosts passwdmana daftar filehosts passwd
RedGrittyBrick
2
@RedGrittyBrick tetapi konteks pertanyaannya adalah tar dari sebuah pipa, yaitu: tidak ada daftar file. Mengatakan tar mengharapkan daftar file tidak benar. Masalahnya adalah ia mengharapkan nama file output (tunggal) ketika OP menentukan f, dan dia tidak menyediakannya.
drevicko
10

The -fpilihan menentukan file, yang lain output pergi ke stdout. Jadi, jatuhkan pengalihan:

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

Atau jatuhkan fopsi:

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

Begitu pula dengan untarring.

Piskvor meninggalkan gedung
sumber
Apakah ini berhasil? Keduanya echo "hello" | tar czvf foo.tar.gzdan echo "hello" | tar czv > foo.tar.gzgagal bagi saya.
425nesp