ฉันจะสร้าง tar ที่ถูกบีบอัดใน sun solaris ได้อย่างไร?


11

ฉันลงชื่อเข้าใช้ Sun Solaris OS แล้ว ฉันต้องการสร้างและแยกไฟล์ tar บีบอัด ฉันลองคำสั่ง UNIX ปกตินี้:

tar -cvzf file.tar.gz directory1

มันล้มเหลวในการดำเนินการใน Sun OS ด้วยข้อผิดพลาดดังต่อไปนี้

bash-3.2$ tar -cvzf file.tar.tz directory1
tar: z: unknown function modifier
Usage: tar {c|r|t|u|x}[BDeEFhilmnopPqTvw@[0-7]][bfk][X...] [blocksize] [tarfile] [size] [exclude-file...] {file | -I include-file | -C directory file}...

2
ทำไมคุณถึงคิดว่ามันเป็นคำสั่ง UNIX ปกติ?
schaiba

ฉันคิดว่าคุณต้องใช้เวลาอ่านความแตกต่างระหว่างเครื่องมือ Unixes Linux และ GNU
coteyr

4
เมื่อพวกเขาเพิ่มzธงนั้นลงใน GNU tar เราได้สูญเสียตัวอย่างที่ดีที่สุดของเราสำหรับการสอนผู้คนถึงวิธีคิดอย่างมีเหตุผลและสร้างท่อส่ง ...

คำตอบ:


28

เพื่อหลีกเลี่ยงการสร้างไฟล์กลางชั่วคราวคุณสามารถใช้คำสั่งนี้

tar cvf - directory1|gzip -c >file.tar.gz

2
นี่เป็นข้อได้เปรียบที่อาจเกิดขึ้นซึ่งการประมวลผลบางอย่างสามารถเกิดขึ้นพร้อมกัน
psmears

เป็นf -สิ่งจำเป็นหรือไม่ Solaris tarส่งออกไปยัง stdout โดยค่าเริ่มต้น?
ทำเครื่องหมาย

2
@ Mark: อ้างอิงจากman page "หากfไม่ได้ระบุไว้tarจะใช้อุปกรณ์ที่ระบุโดยTAPEตัวแปรสภาพแวดล้อมหากตั้งค่าไว้มิฉะนั้นจะใช้ค่าเริ่มต้นที่กำหนดไว้/etc/default/tar" ดังนั้นไม่ดูเหมือนคุณจะสามารถสรุปได้ว่าf -ไม่จำเป็น
Ilmari Karonen

@Romeo: ขอบคุณสำหรับคำตอบฉันพบว่ามีประโยชน์ คุณสามารถอธิบายได้ไหมว่าทำไมต้องใช้ "-" ระหว่าง cvf และชื่อไดเรกทอรี? นอกจากนี้ฉันลองใช้คำสั่งของคุณในหลาย ๆ ระบบปฏิบัติการ - Solaris 10, 11.4, Linux (RHEL, CentOS, Oracle, ฯลฯ ) และทำงานได้อย่างต่อเนื่อง ฉันยังตรวจสอบหน้า man tar ที่เกี่ยวข้อง - ทำไมงานด้านบนใน Linux โดยไม่มี "-" ก่อน cvf? ฉันคาดหวังว่า Linux จะต้องการบางสิ่งเช่น "tar -cvf .... " ขอบคุณอีกครั้งสำหรับคำตอบ
rc1

@ rc1 เส้นประใน tar หมายความว่าคุณตั้งค่าไฟล์เอาต์พุตเป็น STDOUT มีพารามิเตอร์สองลักษณะคือ BSD และ SYSV และ Linux tar ใช้งานได้กับทั้งคู่ (พร้อมและไม่มีเส้นประก่อน cvf)
Romeo Ninov

10

ดูเหมือนว่า Solaris tarจะไม่รู้วิธีบีบอัด ดังนั้นให้ทำเอง:

tar -cvf file.tar directory1 && gzip file.tar

นั่นคือทั้งหมดที่-zสวิตช์ GNU tar ทำอยู่แล้ว file.tar.gzคำสั่งดังกล่าวจะผลิต


สิ่งนี้จะทำงานได้ (ตราบใดที่คุณมีพื้นที่ว่างในดิสก์เพียงพอที่จะจัดเก็บไฟล์file.tarเก็บถาวรกลางที่ไม่มีการบีบอัด) แต่มันก็ช้าและสิ้นเปลืองพื้นที่ดิสก์โดยไม่จำเป็น ฉันไม่สามารถคิดว่าสถานการณ์ใด ๆ ที่นี้จะเป็นที่นิยมในการตอบ Romeo Ninov ของ
Ilmari Karonen

1
@IlmariKaronen ไม่สามารถฉันฉันแค่คิดถึงสิ่งนี้ก่อน
terdon

2

ตรวจสอบว่าคุณได้SUNWgtarติดตั้ง นี่เป็นเวอร์ชั่นของ GNU tarและมีให้/usr/sfw/bin/gtarซึ่งจะช่วยให้การใช้ตัวเลือก GNU ที่จะ tar


-1

โปรดลองคำสั่งด้านล่าง

tar -cvf file.tar directory1 && gzip file.tar

(เพื่อ zip ไฟล์บน solaris)

gunzip file.tar.gz

(เพื่อคลายซิป)


1
สิ่งนี้ไม่ได้เพิ่มทั้งคำตอบก่อนหน้านี้
Jeff Schaller

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