วิธีแยกไฟล์จากไฟล์. tar.gz หรือ. tar.bz2 บน Linux

ไฟล์ Tar เป็นไฟล์เก็บถาวรที่บีบอัด คุณจะพบบ่อยในขณะที่ใช้การแจกจ่าย Linux เช่น Ubuntu หรือแม้กระทั่งในขณะที่ใช้เทอร์มินัลบน macOS ต่อไปนี้เป็นวิธีการแยกหรือยกเลิกการตั้งค่าเนื้อหาของไฟล์ tar หรือที่เรียกว่า tarball

. tar.gz และ. tar.bz2 หมายถึงอะไร

ไฟล์ที่มี a .tar.gzหรือ.tar.bz2นามสกุลคือไฟล์บีบอัดที่เก็บถาวร ไฟล์ที่มี.tarนามสกุลเพียงอย่างเดียวจะไม่มีการบีบอัด แต่จะหายากมาก

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

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

การแตกไฟล์จากไฟล์ Tar

สมมติว่าคุณดาวน์โหลดแผ่นเพลงสองไฟล์ ไฟล์เดียวจะเรียกว่าukulele_songs.tar.gzที่อื่น ๆ guitar_songs.tar.bz2ที่เรียกว่า ไฟล์เหล่านี้อยู่ในไดเร็กทอรีดาวน์โหลด

มาแยกเพลงอูคูเลเล่:

tar -xvzf ukulele_songs.tar.gz 

เมื่อแตกไฟล์แล้วไฟล์เหล่านั้นจะแสดงรายการในหน้าต่างเทอร์มินัล

ตัวเลือกบรรทัดคำสั่งที่เราใช้คือ:

  • -x : แตกไฟล์ดึงไฟล์จากไฟล์ tar
  • -v : Verbose แสดงรายการไฟล์ที่กำลังแตกไฟล์
  • -z : Gzip ใช้ gzip เพื่อขยายไฟล์ tar
  • -f : ไฟล์ชื่อของไฟล์ tar ที่เราต้องการtarใช้งาน ตัวเลือกนี้จะต้องตามด้วยชื่อของไฟล์ tar

แสดงรายการไฟล์ในไดเรกทอรีด้วยlsและคุณจะเห็นว่ามีการสร้างไดเร็กทอรีชื่อ Ukulele Songs ไฟล์ที่แตกแล้วอยู่ในไดเร็กทอรีนั้น ไดเร็กทอรีนี้มาจากไหน? มีอยู่ในtarไฟล์และถูกแตกออกพร้อมกับไฟล์

ตอนนี้ขอแยกเพลงกีตาร์ ในการทำเช่นนี้เราจะใช้คำสั่งเกือบจะเหมือนเดิม แต่มีข้อแตกต่างที่สำคัญอย่างหนึ่ง .bz2ต่อท้ายนามสกุลบอกเราจะได้รับการบีบอัดโดยใช้คำสั่ง bzip2 แทนที่จะใช้-zตัวเลือก (gzip) เราจะใช้-jตัวเลือก (bzip2)

tar -xvjf guitar_songs.tar.bz2

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

  • -x : แตกไฟล์ดึงไฟล์จากไฟล์ tar
  • -v : Verbose แสดงรายการไฟล์ที่กำลังแตกไฟล์
  • -j : Bzip2 ใช้ bzip2 เพื่อขยายไฟล์ tar
  • -f : ไฟล์ชื่อของไฟล์ tar ที่เราต้องการให้ tar ทำงานด้วย

หากเราแสดงรายการไฟล์ในไดเร็กทอรีดาวน์โหลดเราจะเห็นไดเร็กทอรีอื่นที่เรียกว่า Guitar Songs ได้ถูกสร้างขึ้น

การเลือกว่าจะแยกไฟล์ไปที่ใด

หากเราต้องการแตกไฟล์ไปยังตำแหน่งอื่นที่ไม่ใช่ไดเร็กทอรีปัจจุบันเราสามารถระบุไดเร็กทอรีเป้าหมายโดยใช้-Cอ็อพชัน (ไดเร็กทอรีที่ระบุ)

tar -xvjf guitar_songs.tar.gz -C ~ / Documents / Songs /

ดูในไดเร็กทอรี Documents / Songs ของเราเราจะเห็นไดเร็กทอรี Guitar Songs ถูกสร้างขึ้น

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

mkdir -p ~ / Documents / Songs / Downloaded && tar -xvjf guitar_songs.tar.gz -C ~ / Documents / Songs / Downloaded /

-p (พ่อแม่) ตัวเลือกที่ทำให้เกิดmkdirการสร้างไดเรกทอรีปกครองใด ๆ ที่จะต้องสร้างความมั่นใจไดเรกทอรีเป้าหมายจะถูกสร้างขึ้น

ดูภายในไฟล์ Tar ก่อนที่จะแตกไฟล์

จนถึงตอนนี้เราเพิ่งก้าวกระโดดแห่งศรัทธาและแยกไฟล์ที่มองไม่เห็นออก คุณอาจต้องการดูก่อนที่จะกระโดด คุณสามารถตรวจสอบเนื้อหาของtarไฟล์ก่อนที่คุณจะแตกไฟล์โดยใช้-tตัวเลือก (รายการ) โดยปกติจะสะดวกในการไพพ์เอาต์พุตผ่านlessคำสั่ง

tar -tf ukulele_songs.tar.gz | น้อยกว่า

สังเกตว่าเราไม่จำเป็นต้องใช้-zตัวเลือกเพื่อแสดงรายการไฟล์ เราจะต้องเพิ่ม-zตัวเลือกเมื่อเราแยกไฟล์จาก.tar.gzไฟล์ ในทำนองเดียวกันเราไม่ต้องการ-jตัวเลือกในการแสดงรายการไฟล์ในtar.bz2ไฟล์

เมื่อเลื่อนดูผลลัพธ์เราจะเห็นว่าทุกอย่างในไฟล์ tar ถูกเก็บไว้ในไดเร็กทอรีชื่อ Ukulele Songs และภายในไดเร็กทอรีนั้นมีไฟล์และไดเร็กทอรีอื่น

เราจะเห็นได้ว่าไดเร็กทอรี Ukulele Songs มีไดเร็กทอรีที่เรียกว่า Random Songs, Ramones และ Possibles

ในการแตกไฟล์ทั้งหมดจากไดเร็กทอรีภายในไฟล์ tar ให้ใช้คำสั่งต่อไปนี้ โปรดสังเกตว่าเส้นทางถูกห่อด้วยเครื่องหมายคำพูดเนื่องจากมีช่องว่างในเส้นทาง

tar -xvzf ukulele_songs.tar.gz "เพลงอูคูเลเล่ / Ramones /"

ในการแตกไฟล์เดียวให้ระบุพา ธ และชื่อของไฟล์

tar -xvzf ukulele_songs.tar.gz "เพลงอูคูเลเล่ / 023 - My Babe.odt"

คุณสามารถแยกไฟล์ที่เลือกได้โดยใช้สัญลักษณ์แทนซึ่ง*แสดงถึงสตริงของอักขระ?ใด ๆและแสดงถึงอักขระเดี่ยวใด ๆ การใช้สัญลักษณ์แทนจำเป็นต้องใช้--wildcardsตัวเลือก

tar -xvz --wildcards -f ukulele_songs.tar.gz "เพลงอูคูเลเล่ / Possibles / B *"

การแตกไฟล์โดยไม่ต้องแตกไดเร็กทอรี

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

หากเราระบุ--strip-components=1ด้วยไฟล์ tar ตัวอย่างของเราไดเร็กทอรี Ukulele Songs ที่อยู่บนสุดภายในไฟล์ tar จะไม่ถูกสร้างขึ้นบนฮาร์ดไดรฟ์ ไฟล์และไดเร็กทอรีที่จะถูกแตกออกไปยังไดเร็กทอรีนั้นจะถูกแตกออกในไดเร็กทอรีเป้าหมาย

tar -xvzf ukulele_songs.tar.gz --strip-components = 1

มีไดเร็กทอรีเพียงสองระดับที่ซ้อนกันภายในไฟล์ tar ตัวอย่างของเรา ดังนั้นหากเราใช้--strip-components=2ไฟล์ทั้งหมดจะถูกแตกในไดเร็กทอรีเป้าหมายและไม่มีการสร้างไดเร็กทอรีอื่น ๆ

tar -xvzf ukulele_songs.tar.gz --strip-components = 2

หากคุณดูที่หน้า man Linux คุณจะเห็นว่าtarต้องเป็นตัวเลือกที่ดีสำหรับชื่อ "command ที่มีตัวเลือกบรรทัดคำสั่งมากที่สุด" โชคดีที่เพื่อให้เราสามารถแยกไฟล์.tar.gzและtar.bz2ไฟล์ที่มีการควบคุมระดับละเอียดที่ดีเราจำเป็นต้องจำตัวเลือกเหล่านี้เพียงไม่กี่ตัวเท่านั้น