ท่อเข้าและออกจาก tar และ gzip


9

ฉันพยายามรับหมายเลขอ้างอิงเกี่ยวกับวิธีการไพพ์จากคำสั่งไปยังบางสิ่งเช่น gzip, cpio หรือ tar

คำสั่งที่เป็นปัญหานั้นเป็นของระบบ ZFS ฉันใช้งาน ZFS บน Ubuntu Linux 10.04.3

คำสั่งที่ฉันทำงานด้วยคือ;

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

ส่วนเหล่านี้ฉันเข้าใจ

แต่คำถามแรกของฉันคือฉันจะทำอย่างไรที่จะส่งไปยัง tar + gzip

นี้?

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

และคำถามอื่นของฉันคือฉันจะนำข้อมูลออกจาก tarball หรือ gzip ได้อย่างไร

ฉันต้องใช้ zfs recieve media/mypictures@20070607 < ~/backups/20070607

ดังนั้นมันจะเป็นแบบนี้ถ้าฉันใช้น้ำมันดิน?

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

ความคิดใด ๆ

คำตอบ:


9

tarคาดว่าจะได้รับรายชื่อไฟล์เป็นอาร์กิวเมนต์บรรทัดคำสั่ง เท่าที่ฉันรู้มันไม่สามารถใช้ในการอ่านไปป์ไลน์ที่ไม่ระบุชื่อ (สิ่งที่มันจะเก็บเป็นชื่อไฟล์และเมตาดาต้าไฟล์?)

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

หากข้อมูลของคุณเป็นรายการโลจิคัลเดียวหรือสตรีมไม่จำเป็นต้องใช้บางอย่างเช่น tar ซึ่งจะใช้เพื่อจัดกลุ่มชุดของไฟล์แยกกัน

มิฉะนั้นคุณจะต้องเขียนข้อมูลไปยังไฟล์ก่อน, tar ไฟล์แล้วลบไฟล์


จริงๆ? ฉันแม้ว่า tar เป็นเพียงรูปแบบหนึ่งของการบีบอัด ดังนั้นข้าม tar และเพียงแค่ gzip?
ianc1215

3
ใช่เพียงใช้zfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz
RedGrittyBrick

2
Tar ไม่คาดหวังรายชื่อไฟล์เว้นแต่ว่าคุณจะระบุ-fตัวเลือก (tar ยังยอมรับfโดยไม่มี "-")
drevicko

1
@drevicko: บริบทของคำถามคือการสร้างไฟล์เก็บถาวร tar รายการไฟล์ที่ฉันหมายถึงคือรายการไฟล์ (และ / หรือไดเรกทอรี) ที่จะรวมอยู่ในไฟล์เก็บถาวรที่เขียน ตัวอย่างเช่น: cd /etc; TAPE=/tmp/rgb.tar tar c hosts passwdโดยที่รายการของไฟล์คือhosts passwd
RedGrittyBrick

1
@RedGrittyBrick แต่บริบทของคำถามคือ tar จากไปป์คือ: ไม่มีรายการของไฟล์ การบอกว่า tar คาดว่ารายการของไฟล์จะไม่เป็นจริง ปัญหาคือมันคาดว่าชื่อไฟล์ที่ส่งออก (เดียว) เมื่อ OP ระบุfและเขาไม่ได้ให้มัน
drevicko

9

-fตัวเลือกระบุไฟล์อื่นที่ส่งออกไป stdout ดังนั้นปล่อยการเปลี่ยนเส้นทาง:

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

หรือวางตัวfเลือก:

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

ในทำนองเดียวกันกับ untarring

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.