แกะ 'tar' แต่เปลี่ยนชื่อไดเรกทอรีเป็นสารสกัด


คำตอบ:


35

ใช้-Cและ--strip-components(ดูman tar)

ตัวอย่าง:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

คำอธิบาย:

การ-Cตั้งค่าสถานะสมมติว่ามีไดเรกทอรีอยู่แล้วดังนั้นเนื้อหาของไฟล์ tar สามารถขยายเข้าไปได้ mkdir FOLDERด้วยเหตุนี้

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


man tarผมอ่าน --strip-componentsไม่ได้จุด เป็นคนดี
Felipe Alvarez

1
tar-1.14 ใช้ --strip-path, tar-1.14.90 + ใช้ --strip-components อาจมีปัญหาที่นี่
มิคาอิล Moskalev

ฉันจะลบล้างสิ่งนี้ถ้ามันเป็นตัวอย่างและไม่ใช่แค่สวิทซ์เนื่องจากสถานะคู่มือออนไลน์รูปแบบการโต้แย้ง 3 รูปแบบทำให้เกิดความสับสน
เลน

ลืม -f บน tar -xz ฉันคิด ล้มเหลวสำหรับฉัน ฉันคิดว่าฉันกำลังใช้สิ่งนี้โดยไม่มีเหตุผลตลอดเวลา ...
John Carrell

17

คุณยังสามารถใช้--transformตัวเลือกเพื่อความยืดหยุ่นอีกเล็กน้อย ยอมรับการดำเนินการเปลี่ยน sed ใด ๆ

ตัวอย่างเช่นนี่คือวิธีที่ฉันแยก Linux tarball ไปยังไดเรกทอรีใหม่เพื่อให้ฉันสามารถใช้โปรแกรมแก้ไข:

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