ฉันจะแยกไดเรกทอรีเฉพาะจาก tarball ได้อย่างไร และแยกไดเรกทอรีชั้นนำ?


12

ฉันต้องการแยกไดเรกทอรีที่เฉพาะเจาะจงจาก wordpress tarball โดยเฉพาะการwp-includes .ดูเหมือนว่าโครงสร้างไดเรกทอรีภายใน tarball เป็นwordpress/wp-includesแต่ฉันต้องการเพียง./wp-includesเมื่อมันถูกสกัดไม่มีไดเรกทอรี WordPress ชั้นนำ ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


13

เพื่อแยกไดเรกทอรีเฉพาะ (และเนื้อหาซ้ำ) เพียงแค่ผ่านมันเป็นอาร์กิวเมนต์พิเศษในบรรทัดคำสั่ง ด้วยGNU tarคุณสามารถดึงไดเร็กตอรี่นำด้วย--strip-componentsตัวเลือก (และโดยทั่วไปจะแปลงชื่อไฟล์ด้วย--transform) บนระบบที่ไม่ใช่ Linux คุณสามารถใช้pax (เป็นใน POSIX แต่ลีนุกซ์บางตัวละเว้นการติดตั้งเริ่มต้น) และ-sตัวเลือก

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

คุณสามารถรวมรายการรวมเข้ากับกฎการเขียนใหม่โดยผนวกกฎเพื่อเขียนทุกอย่างใหม่ให้เป็นชื่อว่างเปล่า (ซึ่งหมายถึง“ ไม่แยก” กฎจะใช้เฉพาะถ้ากฎก่อนหน้านี้ไม่ตรงกัน)

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!

5

สมมติว่าคุณมีน้ำมันดิน GNU คุณสามารถใช้--strip-components:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

ฉันเชื่อว่ารุ่น BSD tar ปัจจุบันสนับสนุน--strip-componentsเช่นกัน ในกรณีที่เลวร้ายที่สุดคุณสามารถทำได้:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress

ในที่สุดฉันก็ลงมือทำเพราะเพิ่งรีบ แต่ก็รู้ดีว่าอดีตนั้นมีอยู่จริง
xenoterracide

เป็นไปได้ไหมที่จะใช้คำสั่งที่ไม่ต้องการการตั้งชื่อองค์ประกอบที่แยกออกมาอย่างชัดเจน (เช่นwordpress)? ฉันต้องการสิ่งนี้เมื่อฉันแยก GitHub สร้าง tarballs ซึ่งมีการแก้ไข git ในองค์ประกอบที่ถอดออกซึ่งฉันไม่ทราบล่วงหน้า
tjanez
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.