ฉันต้องใช้คำสั่งอะไรเพื่อคลายซิป / แตกไฟล์. tar.gz


830

ฉันได้รับไฟล์. tar.gz ขนาดใหญ่จากไคลเอนต์ที่มีไฟล์รูปภาพประมาณ 800 mb (เมื่อไม่มีการบีบอัด) ftp ของ บริษัท โฮสติ้งของเราช้ามากดังนั้นการแตกไฟล์ทั้งหมดในเครื่องและส่งผ่าน ftp นั้นใช้ไม่ได้ ฉันสามารถ ftp ไฟล์. tar.gz ไปยังไซต์โฮสต์ของเราได้ แต่เมื่อฉัน ssh ลงในไดเรกทอรีของฉันและลองใช้ unzip มันทำให้ฉันมีข้อผิดพลาดนี้:

[esthers@clients locations]$ unzip community_images.tar.gz
Archive:  community_images.tar.gz
  End-of-central-directory signature not found.  Either this file is not a zipfile, or it constitutes one disk of a multi-part archive.  In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.
note:  community_images.tar.gz may be a plain executable, not an archive
unzip:  cannot find zipfile directory in one of community_images.tar.gz or community_images.tar.gz.zip, and cannot find community_images.tar.gz.ZIP, period.

ฉันต้องใช้คำสั่งอะไรเพื่อแยกไฟล์ทั้งหมดในไฟล์. tar.gz

คำตอบ:


1390

พิมพ์man tarสำหรับข้อมูลเพิ่มเติม แต่คำสั่งนี้ควรทำเคล็ดลับ:

tar -xvzf community_images.tar.gz

เพื่ออธิบายเพิ่มเติมเล็กน้อย tar เก็บไฟล์ทั้งหมดไว้ในแพ็คเกจcommunity_images.tarเดียว โปรแกรม gzip ใช้การบีบอัดดังนั้นส่วนขยาย gz ดังนั้นคำสั่งจะทำสองสิ่ง:

  • f: นี่จะเป็นธงสุดท้ายของคำสั่งและ tar f ile จะต้องอยู่หลัง มันบอก tar ชื่อและเส้นทางของไฟล์บีบอัด
  • z: บอก tar ให้คลายการบีบอัดไฟล์โดยใช้ g z ip
  • x: tar สามารถเก็บไฟล์หรือ e xระบบทางเดินพวกเขา xไม่หลัง
  • v: ทำให้ tar พูดมาก V erbose output แสดงไฟล์ทั้งหมดที่ถูกแตกออกมา

5
@Shiki ฉันเห็นการแก้ไขที่คุณเสนอ ฉันไม่คิดว่าเป็นการเปลี่ยนแปลงที่เหมาะสมฉันชอบวิธีที่ฉันอธิบายเครื่องมือนี้ ผมไม่คิดว่าคุณtar -xfคำแนะนำจะทำให้ได้คำตอบที่ดีเพิ่มเติม
djeikyb

3
นี่เป็นหนึ่งในคำอธิบายที่ดีกว่าจากคำถามที่มีการใช้ถ้อยคำในทำนองเดียวกันหลายล้านคำถาม
JohnMerlino

1
@KasunSiyambalapitiya ตามค่าเริ่มต้นจะสิ้นสุดในโฟลเดอร์ปัจจุบัน ดูยังman tar; มองหา-Cตัวเลือก หรืออาจตรวจสอบคำตอบอื่น ๆ 😉
djeikyb

6
เตือนฉันถึงบทความของ xckd เกี่ยวกับน้ำมันดิน ฉันต้องกลับมาทุกครั้ง
mgarey

19
ช่วยในการจำของฉันสำหรับเรื่องนี้คือ: xระบบทางเดินซีอีวี *** ing ไมล์
Agargara

172

หากคุณต้องการแยกไฟล์ไปยังปลายทางที่ต้องการคุณสามารถเพิ่ม ตรวจสอบให้แน่ใจว่าคุณทำไดเรกทอรีเป็นอันดับแรกในกรณีนี้: ~ / Pictures / Community-C /destination/path/

ตัวอย่าง:

mkdir ~/Pictures/Community
tar xf community_images.tar.gz -C /home/emmys/Pictures/Community/

คุณสามารถจดจำได้ง่ายถ้าคุณคิดจะบอกtarให้กับ E X tract a F ile

gif ของกระบวนการเสร็จสิ้นที่ terminal

หมายเหตุ:จำไว้ว่าคุณสามารถค้นหาภายในหน้าคนที่มี?คำว่า + เพื่อค้นหาจากนั้นnและNไปที่อินสแตนซ์ถัดไปหรือก่อนหน้าของคำที่คุณกำลังค้นหา


5
อย่าลืมCสำหรับ " ไดเรกทอรี hange"! นอกจากนี้ฉันรู้สึกว่ามันจะดีกว่าที่จะไม่ผสมตัวเลือกยัติภังค์และยัติภังค์ (โดยเฉพาะอย่างยิ่งทำให้สับสนเมื่อใช้ps)
djeikyb

2
ทำไมมันไม่เหมือนทุกคำสั่งอื่น ๆ ?
Jan M.

6
ฉันรักคำแนะนำ 'tar to e X tract ของคุณ ile F'
Nam G VU

2
1+ สำหรับอนิเมชั่น gif
Nick Steele

หนึ่งสามารถใช้--directory="/home/emmys/Pictures/Community/"(ซึ่งฉันคิดว่าจำง่ายกว่า-C)
Patrick Dark

107

ในบางจุดtarได้รับการอัปเกรดเป็นขยายอัตโนมัติ สิ่งที่คุณต้องการในตอนนี้คือ:

tar xf community_images.tar.gz

ใช้คำอธิบายเดียวกัน:

  • f: นี่จะเป็นธงสุดท้ายของคำสั่งและ tar f ile จะต้องอยู่หลัง มันบอก tar ชื่อและเส้นทางของไฟล์บีบอัด
  • x: e x tract ไฟล์

หมายเหตุการขาดเครื่องหมายขีดกลางสำหรับแฟล็กคำสั่ง นี่เป็นเพราะ tar ส่วนใหญ่อนุญาตทั้งตัวเลือกสไตล์ gnu และ bsd (แบบง่าย gnu ต้องการยัติภังค์ แต่ bsd ไม่รองรับ)


1
มีเอกสารเกี่ยวกับเรื่องนี้หรือไม่? ฉันค้นหามาตลอดเพื่ออ้างอิงถึงสิ่งนี้ฉันไม่เคยใช้แฟล็ก -z และทุกอย่างจะได้รับ gzipped ดังนั้นฉันจึงกังวลว่าฉันจะไม่บีบอัด tarballs เลยฮ่า ๆ ๆ ขอบคุณ
neurosnap

2
@neurosnap ดูคู่มือ gnuและคู่มือของbsd
djeikyb

3
อาจดีกว่าที่จะแก้ไขคำตอบเดิมของคุณ
เซท

3
@Seth มันรู้สึก / รู้สึกแตกต่างมากพอที่จะเป็นคำตอบที่แยกจากกันโดยเฉพาะอย่างยิ่งในบริบทของการแก้ไขการทำลายล้างที่ก่อให้เกิดความเสียหาย ฉันจะคิดใหม่หลังเลิกงาน แต่อาจเป็นวิธีที่ง่ายกว่าในการผสานกว่าที่ฉันคิดไว้
djeikyb

2
@EnricoMariaDeAngelis bsd tar ตั้งแต่อย่างน้อยปี 2004 และ gnu tar ตั้งแต่อย่างน้อยปี 2010 ได้สนับสนุนการเลือกเครื่องบีบอัดอัตโนมัติ เป็นไปได้ว่าเวอร์ชั่นทาร์ (รุ่นล่าสุด) (ยุคนี้?
djeikyb

11

การจดจำธงทั้งหมดสำหรับtarอาจเป็นเรื่องน่าเบื่อ หน้าที่ XKCD:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นฉันจึงสร้างสคริปต์ตัวเองขึ้นมาใน Python เพื่อทำสิ่งนั้น รวดเร็วสกปรกcpเหมือนในการใช้งาน:

#!/usr/bin/env python3
import tarfile,sys,os
tf = tarfile.open(name=sys.argv[1],mode='r:gz')
where = '.'
if len(sys.argv) == 3:
    where = sys.argv[2]
tf.extractall(path=where)
tf.close()

ใช้มันเพื่อ:

myuntar.py archive.tar

ดูเพิ่มเติมที่คล้ายกันสคริปต์สำหรับการขยายไฟล์บีบอัดซิป


2
:) เพียงสองธง tar ที่ต้องจำไว้-cafสำหรับการสร้างตามชื่อไฟล์และ-xfสำหรับการแยก (AFAIK ใช้ได้กับ tar ทุกประเภท)
Videonauth

@Videonauth ฉันรู้ว่ามันไม่ซับซ้อน แต่ด้วยเหตุผลบางอย่างฉันไม่เคยจำตัวเลือกเหล่านี้ อาจเป็นเพราะฉันไม่ได้จัดการกับจดหมายเหตุบ่อยครั้งเพียงพอ
Sergiy Kolodyazhnyy

จะทำแค่ไฟล์ gzipped tar เท่านั้น? api docs พูดถึงโหมดการอ่านด้วยการบีบอัดแบบโปร่งใส มันจะมีพฤติกรรมมากกว่านี้tar xf <file>ไหม?
djeikyb

7

คำตอบที่รวดเร็ว:

tar -xvf  <.tar file> or <.tar.xz file>
tar -xzvf <.tar.gz file>
tar -xjvf <.tar.bz2 file>

[ หมายเหตุ ]:

  • -v ประมวลผลรายการไฟล์อย่างละเอียดแล้ว
  • -z กรองไฟล์เก็บถาวรผ่าน gzip
  • -f ใช้ไฟล์หรืออุปกรณ์เก็บถาวร ARCHIVE
  • -x แตกไฟล์จากไฟล์เก็บถาวร
  • -j bzip2
  • tar -xfarchive.tar # archive.tarสารสกัดจากไฟล์ทั้งหมดจาก

4

ในกรณีที่คุณไม่สามารถแยก.tar.gzไฟล์โดยใช้

tar -xvzf fileName.tar.gz

ลองแยกโดยใช้

tar xf fileName.tar.gz

4
หากเป็นไฟล์ gzipped tar คำสั่งแรกจะทำงานเสมอ ถ้ามันไม่ทำงานคุณไม่มีไฟล์ tar gzipped คำสั่งหลังเป็นคำแนะนำที่ดีสำหรับผู้ที่ไม่สนใจว่าจะใช้อัลกอริธึมการบีบอัดใดในไฟล์ tar
djeikyb

0

คุณสามารถทำได้ในขั้นตอนแรก:

gunzip community_images.tar.gz

จากนั้นคุณมีไฟล์: community_images.tar

ขั้นตอนที่สองจะเป็น:

tar -xvf community_images.tar

และจะแตกไฟล์ * .tar


0

tar xvf file.tar.gz

  • x สำหรับสารสกัด
  • v สำหรับ verbose (ไฟล์รายการ)
  • f สำหรับชื่อไฟล์นั้นต่อไป

tar รุ่นทันสมัยจากระยะไกลควรตรวจสอบอัตโนมัติว่าไฟล์เก็บถาวรนั้นเป็น gzipped และเพิ่ม "z" ให้คุณ

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