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?

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.


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.


Apakah ini berhasil? Keduanya echo "hello" | tar czvf foo.tar.gzdan echo "hello" | tar czv > foo.tar.gzgagal bagi saya.
425nesp
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.