untar, ungz, gz, tar - คุณจะจำตัวเลือกที่มีประโยชน์ทั้งหมดได้อย่างไร?


76

ฉันค่อนข้างมั่นใจว่าฉันไม่ใช่คนเดียวที่มีปัญหาดังต่อไปนี้: ทุกครั้งที่ฉันจำเป็นต้องคลายการบีบอัดไฟล์ใน * ระวังฉันไม่สามารถจำสวิตช์ทั้งหมดได้ ทำเช่นนี้.

คุณมีแผ่นโกงการบีบอัดที่ดีหรือไม่? หรือวิธีช่วยในการจำสำหรับสวิตช์ที่น่ารังเกียจเหล่านั้นทั้งหมดใน tar?

ฉันกำลังทำให้บทความนี้เป็นวิกิเพื่อให้เราสามารถสร้างแผ่นโกงที่ดีที่นี่

โอ้และเกี่ยวกับหน้าคน: มีสิ่งหนึ่งที่พวกเขาไม่ได้มีประโยชน์สำหรับมันคือการหาวิธีการคลายการบีบอัดไฟล์


1
ใช้หน้าคู่มือแล้วคุณไม่จำเป็นต้องสร้างวิกิและต้องจำคำสั่ง man :-) man (1)
Florenz Kley

9
eXtract Zee File เป็นวิธีที่ฉันจำได้
Canadian Luke

สร้างไฟล์ Zee Vocking อาจเหมาะสำหรับการสร้าง. tar.gz
CousinCocaine

คำตอบ:


65

หรือวิธีการเกี่ยวกับการใช้เชลล์ที่มีความสามารถในการดำเนินการขั้นสูง (เช่น zsh หรือเวอร์ชันใหม่ของ bash) ซึ่งจะทำให้ตัวเลือกของคุณสมบูรณ์ด้วยความช่วยเหลือที่ครอบคลุม? :))

เกี่ยวกับ tar: เพียงดูที่แป้นพิมพ์ "qwerty" มีตัวอักษร "zxcvf" อยู่ติดกัน คุณต้องการ "tar czvf file.tar.gz files" หรือ "tar xzvf file.tar.gz"


อุปกรณ์ประกอบฉากสำหรับตอบคำถามจริง ๆ :)

ตอนนี้เป็นเคล็ดลับ "qwerty" เย็น! :)

fricking สุดยอด!
deadprogrammer

2
เคล็ดลับอีกอย่างคือไม่จำเป็นต้องใช้zตัวเลือก (หรือjตัวเลือกสำหรับ.bz2ไฟล์) เมื่อทำการแยกด้วย tar รุ่นที่ทันสมัย มันคลายการบีบอัดไฟล์โดยอัตโนมัติ
เนท

10
ฉันใช้น้ำมันดินประมาณหมื่นล้านครั้งและไม่เคยสังเกตเห็นว่าตัวเลือกที่ใช้กันมากที่สุดทั้งหมดอยู่ติดกันบนแป้นพิมพ์ headsmack
Tyler McHenry

41

สรุปตัวเลือก tar

คุณสามารถแก้ไขได้เพื่อเพิ่มสวิตช์ลึกลับเพิ่มเติม แต่นี่คือพื้นฐาน:

  • x - แยกไฟล์
  • c - สร้างที่เก็บถาวร
  • t - รายการไฟล์
  • v - verbose (ไฟล์รายการตามที่มันประมวลผล)
  • j - ใช้การบีบอัด bz2
  • z - ใช้การบีบอัด gz
  • f - อ่านหรือเขียนไฟล์ลงดิสก์

ตัวอย่าง

คลายการบีบอัดไฟล์ tar.gz: tar zxf tarball.tar.gz

คลายการบีบอัดไฟล์ tar.bz2: tar jxf tarball.tar.bz2

สร้างไฟล์ tar.gz: tar zcvf tarvall.tar.gz mydir / *


23

มีสคริปต์ Perl ขนาดเล็กที่เรียกว่า "unp"

unp filename.tar.gz

... และมันก็แยกทุกอย่าง ทำงานกับไฟล์บีบอัดใด ๆตราบใดที่คุณมีไบนารีที่เหมาะสม และคุณลืมเกี่ยวกับไวยากรณ์หรืออึนั้น ตรวจสอบที่เก็บข้อมูลการกระจาย Linux ของคุณ มันควรจะมี (อย่างน้อยใน Arch, Debian และ Ubuntu)


แม้หลังจากใช้ tar เป็นเวลานานฉันยังคงต้อง google สำหรับธงที่โง่ unp เป็นวิธีที่จะไป
Yada

8

จริงๆด้วยการใช้งานบ่อยฉันสร้างความแตกต่างระหว่างการแยกข้อมูล (x) และการบีบอัดข้อมูล (c):

วิธีแยก:

tar xzf data.tgz

ในการบีบอัด:

tar czf data.tgz

นอกจากนี้คุณสามารถเพิ่มสองฟังก์ชันด้วย. bashrc ของคุณ:

function extract () {     
        if ($# -ne 1); then
                echo "Usage: $0  `<compressed archive>"`
                exit 1
        fi
        tar xzf $1
}

function compress () {
        if ($# -ne 2); then
                echo "Usage: $0 `<compressed archive> <files|directories>"`
                exit 1
        fi
        tar czf $1 $2
}

มีฟังก์ชั่นการดึงข้อมูลที่ดีอีกอันหนึ่งซึ่งตรวจจับส่วนขยายของไฟล์บีบอัดของคุณและทำงานให้คุณ:

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
 }

5

เพียงพิมพ์tar --helpและมีสูตรของคุณ


12
อย่างจริงจังคุณเคยลองอ่านหน้าคนนั้นหรือไม่?
deadprogrammer

มันอาจจะอ่านไม่ออกและยาวไปหน่อย แต่ฉันคิดว่ามันใช้งานได้ดีเพียงแค่ค้นหาชื่อของตัวเลือก คุณยังสามารถ grep สำหรับตัวเลือกที่คุณต้องการเช่น 'tar --help | สารสกัดจาก grep '
Jeremy Ruten

1
ยิ่งใหญ่ และจากนั้นคุณจะต้องลุยหน้า man-page ที่ (ในสิ่งที่คุณกำลังมองหา) จะบอกให้คุณทราบถึงคำสั่งและตัวเลือกลำแสงโบราณที่ไม่มีใครเลยยกเว้นนักพัฒนาที่ต้องการ

2
ฉันไม่เห็นว่ามันยากอะไร หากต้องการแตกไฟล์เก็บถาวรเพียงค้นหาตัวเลือกแยกแล้วเพิ่ม -x ลงในคำสั่งของคุณ หากคุณต้องการให้ verbose ค้นหาตัวเลือกนั้นและเพิ่ม av เพื่อรับ -xv จากนั้นทำต่อไปจนกว่าคุณจะได้รับคำสั่งที่แน่นอนที่คุณต้องการ มันยังมีคำสั่งตัวอย่างสำหรับการดำเนินงานทั่วไป
Jeremy Ruten

1
Jeremy ปัญหาที่แท้จริงคือคุณอาจไม่รู้คำศัพท์ที่เหมาะสมเสมอไป ดังนั้นจึงเป็นเรื่องง่ายที่จะสับสนและค้นหาตัวเลือกที่คล้ายกันและทำให้ใช้งานไม่ได้ จากนั้นคุณจะต้องวาง (บางส่วน) ของพวกเขาในลำดับที่เหมาะสม นี่เป็นเรื่องไม่สำคัญสำหรับบางคนที่ย้ายออกจาก Windows ยิ่งกว่านั้นถ้าพวกเขาไม่รู้จักการเขียนสคริปต์ใน Windows
Nazadus

3

หากคุณมีปัญหาในการจดจำตัวเลือก tar ให้ลองใช้ไพพ์:

  • zcat file.tar.gz | tar xvf -
  • bzcat file.tar.bz2 | tar xvf -

แทนที่tar xvด้วยtar tvเป็นเพียงแค่ดูเนื้อหาของ tarball

ส่วนตัวผมใช้ตัวช่วยจำดังต่อไปนี้:

  • t, x หรือ c สำหรับ "tabulating", "xtracting" หรือ "creating" ตามลำดับ
  • v สำหรับรายการไฟล์ทั้งหมด
  • z, j หรือไม่มีอะไรสำหรับ tar.gz, tar.bz2 หรือ plain. tar ตามลำดับ
  • f สำหรับการให้ชื่อไฟล์กับค่าเริ่มต้นของการใช้ stdin / stdout หรืออุปกรณ์เทป

แม้ว่า "j" และ "bzip2" ดูเหมือนจะไม่เกี่ยวข้องกัน แต่ฉันคิดว่ามันง่ายที่จะจำข้อยกเว้นนี้

นอกจากนี้ฉันคิดว่ามันตลกว่า Googling ได้เปลี่ยน "man tar"


คุณควรจะมีนิสัยที่จะให้fตัวเลือกเสมอ: เมื่อไม่นานมานี้การกระจายตัวของค่าเริ่มต้นของ tar ไปเป็นค่าเริ่มต้นf -ในอดีตf /dev/rmt0หรือใกล้เคียงกัน ท้ายที่สุด tar คือ Tape ARchiver
ephemient

1
การทำเป็นตารางคืออะไร
Claudiu


2

การดำเนินการที่ใช้บ่อยที่สุดสามประการ :

--create -c

สร้างไฟล์เก็บถาวร tar ใหม่

--list -t

แสดงรายการเนื้อหาของไฟล์เก็บถาวร

--extract -x

แยกสมาชิกหนึ่งคนขึ้นไปจากไฟล์เก็บถาวร


การดำเนินงาน tar ห้าขั้นสูง :

--append -r

เพิ่มรายการใหม่ลงในไฟล์เก็บถาวรที่มีอยู่แล้ว

--update -u

เพิ่มสำเนาล่าสุดของสมาชิกไฟล์เก็บถาวรที่ส่วนท้ายของไฟล์เก็บถาวรหากมีอยู่

--concatenate --catenate -A

เพิ่มคลังเก็บที่มีอยู่ล่วงหน้าหนึ่งรายการขึ้นไปที่ส่วนท้ายของคลังเก็บอื่น

--delete

ลบรายการออกจากไฟล์เก็บถาวร (ไม่ทำงานบนเทป)

--compare --diff -d

เปรียบเทียบสมาชิกที่เก็บถาวรกับคู่ของพวกเขาในระบบไฟล์



2

ฉันอ่านคำสั่งในใจเสมอขณะพิมพ์

บีบอัดไฟล์ verbose zip

tar cvzf FILE

แยกไฟล์ zip verbose FILE

tar xvzf FILE

2

ฉันทำต่อไปนี้

วิธีสร้างน้ำมันดิน:

tar czvf foo.tar.gz <files to be included>

วิธี untar:

tar zxvf foo.tar.gz

สิ่งเหล่านี้ควรเป็นสวิตช์หลักที่คุณต้องกังวลเกี่ยวกับ:

c - create
z - compress/uncompress
x - extracte
v - verbose
f - file

คุณสามารถทำสิ่งที่นักเล่นเช่น tar และ inline untar ในขณะที่คุณพยายามย้ายไฟล์ข้ามไดเรกทอรีเช่น:

tar cf - <files to be copied> | (cd <target directory>; tar xvf - )

1

90% ของเวลาที่ฉันใช้

tar -xvf file.*  

x: แยก
v: เป็น verbose (ไม่บังคับ)
f: อินพุตไฟล์ (tar, gz, bzip2, ฯลฯ ... )

ง่ายใช่มั้ย :)
ใช้ Fileroller หรือ Ark ถ้าไม่ได้อยู่ในคอนโซล


จนถึงตอนนี้ฉันใช้ fileroller อยู่ แต่ตอนนี้ฉันโชคไม่ดีเพราะรุ่นที่ฉันใช้มีหน่วยความจำ 1.1 Gb
Andrew Grimm

1

ฉันใช้สคริปต์ Perl ชื่อaunpackส่วนหนึ่งของโครงการatoolมาหลายปีแล้ว ดังนั้นคุณเพียงแค่เรียกใช้: aunpack foo.{zip/tar.gz/tar.bz2}และมันทำสิ่งที่ถูกต้องตามนามสกุลไฟล์

ข้อดีอีกอย่างของaunpackมันคือมันจะไม่สร้างมลพิษให้กับไดเรกทอรีปัจจุบันที่มีไฟล์จำนวนมาก สมมติว่ามี 20 ไฟล์ในfoo.zipที่ไม่ได้อยู่ในไดเรกทอรีย่อย แทนที่จะพ่นไฟล์เหล่านี้ในไดเรกทอรีปัจจุบันaunpackจะสร้างfooไดเรกทอรีย่อยและวางไฟล์ทั้งหมดไว้ในนั้น


1

ทั้งหมดที่คุณต้องเป็นtar x(สารสกัดจาก stdin) tar c(tar ที่ stdout) gzip -c(gzip จาก stdin ที่ stdout; -1ไป-9ในระดับที่อัดกันไปสำหรับbzip2) และgunzip -c(gunzip จาก stdin ที่ stdout) - ทุกอย่างอื่นเป็นท่อ

หากต้องการ tar และ gzip:

$ tar c * | gzip -c > out.tar.gz

หากต้องการถอน -zzip และ untar

$ gunzip -c < out.tar.gz | tar x

หากคุณต้องการแถบความคืบหน้าหวานใช้pvซึ่งคล้ายกับแมว แต่แสดงแถบความคืบหน้า:

$ tar c * | bzip2 -c | pv > out.tar.gz
 22.6MiB 0:00:03 [3.64MiB/s] [  <=>                           ]
$ pv in.tar.gz | bunzip2 -c | tar x
   80MiB 0:00:00 [  58MiB/s] [===============================>] 100%

0

ฉันคิดว่ามันง่ายที่จะคิดในสิ่งที่คุณต้องการและไม่ใช่แค่ตัวอักษรบางตัว

เพื่อแสดงให้เห็นว่าฉันจะใช้ตัวอย่างของวิธีการแยก file.tar.gz:

เนื่องจากเป็นไฟล์ tar คุณควรใช้โปรแกรม tar จากนั้นเป็นตัวเลือก:

  1. x เนื่องจากคุณต้องการ e x tract
  2. z หากไฟล์ลงท้ายด้วย. gz (gz คือหลังจาก tar ในชื่อไฟล์) ตัวเลือกนี้ gunzip เก็บถาวร
  3. f สำหรับไฟล์ตามด้วยชื่อไฟล์เก็บถาวร

นี่แสดงให้เห็นในตัวอย่างด้านล่าง:

tar xzf file.tar.gz

0

วิธีที่ฉันจำได้คือมันเป็น "tar XXvf" เสมอซึ่ง Xs สองตัวนั้นอยู่ที่ไหน

  • x สำหรับ e X tract หรือ c สำหรับC reate และ
  • อย่างใดอย่างหนึ่ง z = gzip, j = bzip2 (gzip เป็นเรื่องธรรมดามากขึ้นดังนั้นจึงมัก z, ด้วยเหตุผลใดก็ตามที่ j = bzip2 ติดอยู่ในหัวของฉัน)

ในบางครั้งคุณพบไฟล์ที่ถูกบีบอัด แต่ไม่ใช่ tarred ที่คุณเพิ่มunลงในไฟล์บีบอัด เช่น g un zip หรือ b un zip2

หากมีสิ่งใดฉันลืม 2 และบางครั้งก็พิมพ์ "bzip"


0

คุณสามารถสร้างนามแฝงได้ เพียงเพิ่มสองบรรทัดเหล่านี้ใน~/.bash_aliasesไฟล์ของคุณ:

alias untar="tar xvf"
alias dotar="tar cvf"

จากนั้นคุณสามารถใช้untar foo.tar.gzเพื่อแยกและdotar foo.barบีบอัด คุณสามารถใช้นามแฝงอื่น ๆ ที่จำได้ง่าย


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