สร้าง tar.xz ในคำสั่งเดียว


159

ฉันพยายามสร้าง.tar.xzไฟล์บีบอัดที่เก็บถาวรในคำสั่งเดียว ไวยากรณ์ที่เฉพาะเจาะจงสำหรับสิ่งนั้นคืออะไร?

ฉันลองtar cf - file | xz file.tar.xzแล้ว แต่มันไม่ทำงาน

คำตอบ:


241

ใช้ตัวเลือกสำหรับการบีบอัด-J xzและอย่าลืมman tar:)

tar cfJ <archive.tar.xz> <files>

แก้ไข 2015-08-10:

หากคุณกำลังส่งข้อโต้แย้งtar ด้วยเครื่องหมายขีดคั่น (เช่น: tar -cfตรงกันข้ามกับtar cf) ดังนั้น-fตัวเลือกจะต้องมีอายุการใช้งานเนื่องจากระบุชื่อไฟล์ (ขอบคุณ@ABBสำหรับการชี้ให้เห็น!) ในกรณีนั้นคำสั่งจะมีลักษณะดังนี้:

tar -cJf <archive.tar.xz> <files>

5
การเพิ่มvสวิตช์คำสั่ง ( tar -cJvf) เป็น verbose จะแสดงไฟล์ที่ถูกเพิ่มลงในไฟล์เก็บถาวร
Stuart Cardall

7
ได้รับการสั่งซื้อที่มีความสำคัญกับเส้นประก็น่าจะดีที่สุดที่จะถือว่าการสั่งซื้อที่มีความสำคัญเสมอและใส่fที่ผ่านมาได้โดยไม่ต้องรีบ
mwfearnley

1
เป็นไปได้ไหมที่จะส่งผ่านพารามิเตอร์ xz เช่น -e (--extended) เห็นได้ชัดว่ามันจะไม่ใช้ขยายตามค่าเริ่มต้น
chmike

3
tarบน macOS ดูเหมือนว่าจะให้การสนับสนุน-Jแต่ไม่ได้ให้คุณสมบัติใน man page ต้องมองมันที่นี่ แม้ว่าพวกเขาจะพูดถึง XZ ในส่วนที่--options...
cbarrick

1
@chmike ใช้ตัวแปรสภาพแวดล้อม XZ_OPT เช่น XZ_OPT = "- 9e -T0"
Dzenly

50

สลับ-Jใช้งานได้กับระบบที่ใหม่กว่าเท่านั้น คำสั่งสากลคือ:

ในการสร้างไฟล์. tar.xz

tar cf - directory/ | xz -z - > directory.tar.xz

คำอธิบาย

  1. tar cf - directoryอ่านไดเร็กทอรี / และเริ่มวางในรูปแบบ TAR เอาต์พุตของการดำเนินการนี้สร้างขึ้นในเอาต์พุตมาตรฐาน

  2. | ไพพ์เอาต์พุตมาตรฐานไปยังอินพุตของโปรแกรมอื่น ...

  3. ... xz -z -ซึ่งเกิดขึ้นเป็น XZ ได้รับการกำหนดค่าให้บีบอัด ( -z) ไฟล์เก็บถาวรจากอินพุตมาตรฐาน ( -)

  4. คุณเปลี่ยนเส้นทางผลลัพธ์จากxzไปยังtar.xzไฟล์


16
-fไม่ได้หมายความว่า "จากแฟ้ม" xzเมื่อผ่านไป แต่มันสั้นสำหรับ--force(ดูรายละเอียดxz (1) ) และไม่ควรใช้ดีที่สุดหากไม่จำเป็น
Eliah Kagan

@EliahKagan แก้ไขแล้ว ขอบคุณ
วอยซ์อดัม Koszek

2
ในการใช้การบีบอัดแบบมัลติเธรดตัวเลือก -T0 สามารถใช้ได้:tar cf - directory/ | xz -z -T0 - > directory.tar.xz
oidualc

ข้อดีอีกอย่างคือคุณสามารถระบุระดับการบีบอัดหรือตัวเลือกอื่นใดกับ xz ในบรรทัดคำสั่ง ตัวอย่างเช่นหากคุณต้องการเพิ่มความเร็วในการบีบอัดและไม่สนใจขนาดที่คุณสามารถใช้-1 -T0หรือ-0 -T0เป็นตัวเลือกซึ่งโดยทั่วไปจะให้ไฟล์ขนาดเล็กกว่า gzip ในเวลาที่เทียบเท่าหรือเร็วกว่าในขณะที่ค่าเริ่มต้น-6ช้ากว่ามาก กว่า gzip
fgwaller

38

หากคุณชอบโหมดไปป์นี่เป็นวิธีที่สะอาดที่สุด:

tar c some-dir | xz > some-dir.tar.xz

ไม่จำเป็นต้องใส่fตัวเลือกเพื่อจัดการกับไฟล์จากนั้นใช้-เพื่อระบุว่าไฟล์เป็นอินพุตมาตรฐาน ไม่จำเป็นต้องระบุ-zตัวเลือกxzเพราะเป็นค่าเริ่มต้น

มันทำงานร่วมกับgzipและbzip2เกินไป:

tar c some-dir | gzip > some-dir.tar.gz

หรือ

tar c some-dir | bzip2 > some-dir.tar.bz2

การบีบอัดก็ค่อนข้างตรงไปตรงมา:

xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x

หากคุณมีtarไฟล์เก็บถาวรเท่านั้นคุณสามารถใช้cat:

cat archive.tar | tar x

tar tหากคุณต้องการที่จะแสดงรายการไฟล์เท่านั้นการใช้งาน


8

ใช้ตัวเลือกการบีบอัด xz

หากคุณต้องการใช้ตัวเลือกการบีบอัดสำหรับxzหรือถ้าคุณใช้tarบน MacOS คุณอาจต้องการหลีกเลี่ยงtar -cJfไวยากรณ์

ตามman xzวิธีการทำเช่นนี้คือ:

tar cf - baz | xz -4e > baz.tar.xz

เพราะฉันชอบรูปแบบของ Wojciech Adam Koszekแต่ไม่ใช่ข้อมูล:

  1. c สร้างไฟล์เก็บถาวรใหม่สำหรับไฟล์ที่ระบุ
  2. fอ่านจากไดเรกทอรี (ควรใส่วินาทีนี้เพราะ-cf! = -fc)
  3. - เอาต์พุตไปยังเอาต์พุตมาตรฐาน
  4. | ไพพ์เอาต์พุตไปยังคำสั่งถัดไป
  5. xz -4eโทรxzด้วย-4eตัวเลือกการบีบอัด (เท่ากับ-4 --extreme)
  6. > baz.tar.xz นำไฟล์ tarred และไฟล์บีบอัดไปที่ baz.tar.xz

อยู่ที่ไหน-4eใช้ตัวเลือกการบีบอัดของคุณเอง ฉันมักจะใช้-kเพื่อ--keepไฟล์ต้นฉบับและ-9สำหรับการบีบอัดหนักจริงๆ -zเพื่อตั้งค่าxzเป็น zip ด้วยตนเองแม้ว่าจะใช้ค่าเริ่มต้นเป็นซิปถ้าไม่ได้กำกับไว้

เพื่อคลายการบีบอัดและ untar

หากต้องการ echo Rafael van Hornเพื่อยกเลิกการบีบอัด & untar (ดูหมายเหตุด้านล่าง):

xz -dc baz.tar.xz | tar x

หมายเหตุ: แตกต่างจากคำตอบของราฟาเอลที่ใช้แทนxz -dc catxzเอกสารแนะนำสิ่งนี้ในกรณีที่คุณใช้สิ่งนี้ในการเขียนสคริปต์ ดีที่สุดที่จะมีนิสัยในการใช้งาน-dหรือ--decompressแทนที่จะunxzเป็นเช่นกัน อย่างไรก็ตามหากคุณต้องใช้คำสั่งเหล่านั้นจากบรรทัดคำสั่งเป็นเรื่องปกติ


มีเหตุผลใดที่ไม่ใช้tar -cJfไวยากรณ์บน MacOS หรือไม่ แค่อยากรู้อยากเห็นเพราะฉันกำลังทำอยู่ตอนนี้และดูเหมือนว่าจะทำงาน
Lo-Tan

2
@ Lo-Tan ใช้งานได้ถ้าคุณมีน้ำมันดิน เมื่อฉันใช้มันฉันไม่มี tar รุ่นที่ถูกต้องดังนั้นมันจึงไม่ทำงานสำหรับฉัน ฉันต้องการใช้ตัวเลือกการบีบอัดสำหรับ xz ซึ่งคุณไม่สามารถทำได้ถ้าคุณใช้น้ำมันดิน นอกจากนี้ฉันยังจำไวยากรณ์ของท่อได้ง่ายกว่าดังนั้นฉันจึงมักจะใช้มัน แต่สำหรับตัวเอง
คอนเนอร์

4

ลองสิ่งนี้: tar -cf file.tar file-to-compress ; xz -z file.tar

บันทึก:

  1. tar.gz และ tar.xz ไม่เหมือนกัน xz ให้การบีบอัดที่ดีกว่า
  2. อย่าใช้ไพพ์| เพราะจะรันคำสั่งพร้อมกัน การใช้;หรือ&ประมวลผลคำสั่งทีละรายการ

+1 ใน RHEL 5.10 ฉันไม่เห็นJตัวเลือก แต่ใช้งานได้ ฉันคิดว่าคุณต้องการ RHEL6
Brian

2
ทำไมไม่ปรับคำสั่งเพื่อไพพ์เอาต์พุตจาก tar เป็น xz
mwfearnley

@mwfearnley ฉันคิดว่าบันทึกเป็นเพียงการเน้นว่าคำสั่งที่จำเป็นต้องดำเนินการตามลำดับ เนื่องจากชื่อไฟล์ถูกใช้ในทั้งสองคำสั่งพวกเขาจะไม่เขียนหรืออ่านข้อมูลจากเอาต์พุตหรืออินพุตมาตรฐาน tar -c file-to-compress | xz -z > file.tar.xzถ้าใช้คำสั่งโดยไม่ต้องระบุชื่อไฟล์ที่พวกเขาจะถูกผูกมัดขึ้นเช่น
แจ็คคิว

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