วิธีแยกไฟล์จากไฟล์ .tar.gz หรือ .tar.bz2 บน Linux
เผยแพร่แล้ว: 2022-01-29ไฟล์ Tar เป็นไฟล์บีบอัด คุณจะพบพวกเขาบ่อยครั้งในขณะที่ใช้การแจกจ่าย Linux เช่น Ubuntu หรือแม้แต่ในขณะที่ใช้เทอร์มินัลบน macOS ต่อไปนี้คือวิธีการแยกหรือ untar เนื้อหาของไฟล์ tar หรือที่เรียกว่า tarball
.tar.gz และ .tar.bz2 หมายถึงอะไร
ไฟล์ที่มีนามสกุล .tar.gz
หรือ . .tar.bz2
เป็นไฟล์บีบอัดที่เก็บถาวร ไฟล์ที่มีนามสกุล . .tar
จะไม่ถูกบีบอัด แต่จะหายากมาก
ส่วน . .tar
ของนามสกุลไฟล์ย่อมาจาก t ape ar chive และเป็นสาเหตุที่ไฟล์ทั้งสองประเภทนี้เรียกว่าไฟล์ tar ไฟล์ Tar ย้อนหลังไปถึงปี 1979 เมื่อคำสั่ง tar
ถูกสร้างขึ้นเพื่อให้ผู้ดูแลระบบสามารถเก็บไฟล์ไว้ในเทปได้ สี่สิบปีต่อมา เรายังคงใช้คำสั่ง tar
เพื่อแยกไฟล์ tar ไปยังฮาร์ดไดรฟ์ของเรา อาจมีบางคนยังคงใช้ tar
กับเทปอยู่
คำต่อท้ายส่วนขยาย .gz
หรือ . .bz2
บ่งชี้ว่าไฟล์เก็บถาวรถูกบีบอัด โดยใช้อัลกอริธึมการบีบอัด gzip
หรือ bzip2
คำสั่ง tar
จะทำงานอย่างมีความสุขกับไฟล์ทั้งสองประเภท ดังนั้นจึงไม่สำคัญว่าจะใช้วิธีการบีบอัดแบบใด และควรมีให้ใช้งานได้ทุกที่ที่มี Bash shell คุณเพียงแค่ต้องใช้ตัวเลือกบรรทัดคำสั่ง tar
ที่เหมาะสม
แยกไฟล์จากไฟล์ Tar
สมมติว่าคุณดาวน์โหลดไฟล์โน้ตเพลงสองไฟล์ ไฟล์หนึ่งชื่อ ukulele_songs.tar.gz
อีกไฟล์หนึ่งชื่อ guitar_songs.tar.bz2
ไฟล์เหล่านี้อยู่ในไดเร็กทอรี Downloads
ลองแยกเพลงอูคูเลเล่:
tar -xvzf ukulele_songs.tar.gz
เมื่อแตกไฟล์แล้ว จะแสดงรายการในหน้าต่างเทอร์มินัล
ตัวเลือกบรรทัดคำสั่งที่เราใช้คือ:
- -x : Extract ดึงไฟล์จากไฟล์ tar
- -v : ละเอียด แสดงรายการไฟล์ขณะที่กำลังแตกไฟล์
- -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 : Extract ดึงไฟล์จากไฟล์ tar
- -v : ละเอียด แสดงรายการไฟล์ขณะที่กำลังแตกไฟล์
- -j : Bzip2 ใช้ bzip2 เพื่อคลายการบีบอัดไฟล์ tar
- -f : ไฟล์ ชื่อของไฟล์ tar ที่เราต้องการให้ tar ทำงานด้วย
หากเราแสดงรายการไฟล์ในไดเร็กทอรี Download เราจะเห็นว่าไดเร็กทอรีอื่นที่เรียกว่า 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 มีไดเร็กทอรีที่เรียกว่า 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 "เพลงอูคูเลเล่/ที่เป็นไปได้/B*"
แตกไฟล์โดยไม่แตกไดเร็กทอรี
ถ้าคุณไม่ต้องการให้โครงสร้างไดเร็กทอรีในไฟล์ tar ถูกสร้างขึ้นใหม่บนฮาร์ดไดรฟ์ของคุณ ให้ใช้ตัวเลือก --strip-components
ตัวเลือก --strip-components
ต้องใช้พารามิเตอร์ที่เป็นตัวเลข ตัวเลขแสดงถึงจำนวนไดเร็กทอรีที่จะละเว้น ไฟล์จากไดเร็กทอรีที่ถูกละเว้นจะยังคงแยกออกมา แต่โครงสร้างไดเร็กทอรีจะไม่ถูกจำลองแบบในฮาร์ดไดรฟ์ของคุณ
ถ้าเราระบุ --strip-components=1
ด้วยไฟล์ tar ตัวอย่างของเรา ไดเร็กทอรีบนสุดของ Ukulele Songs ภายในไฟล์ tar จะไม่ถูกสร้างขึ้นบนฮาร์ดไดรฟ์ ไฟล์และไดเร็กทอรีที่จะแตกไปยังไดเร็กทอรีนั้นจะถูกแตกในไดเร็กทอรีเป้าหมาย
tar -xvzf ukulele_songs.tar.gz --แถบส่วนประกอบ=1
มีการซ้อนไดเร็กทอรีเพียงสองระดับภายในไฟล์ tar ตัวอย่างของเรา ดังนั้นหากเราใช้ --strip-components=2
ไฟล์ทั้งหมดจะถูกแตกในไดเร็กทอรีเป้าหมาย และไม่มีการสร้างไดเร็กทอรีอื่น
tar -xvzf ukulele_songs.tar.gz --แถบส่วนประกอบ=2
หากคุณดูที่หน้าคู่มือ Linux คุณจะเห็นว่า tar
จะต้องเป็นตัวเลือกที่ดีสำหรับชื่อ "คำสั่งที่มีตัวเลือกบรรทัดคำสั่งมากที่สุด" โชคดีที่ช่วยให้เราแยกไฟล์จากไฟล์ .tar.gz
และ tar.bz2
ด้วยการควบคุมที่ละเอียดในระดับดี เราต้องจำตัวเลือกเหล่านี้เพียงไม่กี่ตัวเท่านั้น
คำสั่งลินุกซ์ | ||
ไฟล์ | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · เข้าร่วม · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · ดู · strings · พิมพ์ · เปลี่ยนชื่อ · zip · unzip · เมานต์ · umount · ติดตั้ง · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · แพทช์ · แปลง · rclone · ฉีก · srm | |
กระบวนการ | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · หมดเวลา · ผนัง · ใช่ · ฆ่า · หลับ · sudo · su · เวลา · groupadd · usermod · กลุ่ม · lshw · ปิดระบบ · รีบูต · หยุด · poweroff · passwd · lscpu · crontab · วันที่ · bg · fg | |
ระบบเครือข่าย | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ