tar -tf filename.tar
folder1/file
folder1/name
[...]
ฉันต้องการแยกไฟล์และชื่อไปที่, โฟลเดอร์ 2 สิ่งนี้สามารถทำได้ในฐานะหนึ่งซับ?
tar -tf filename.tar
folder1/file
folder1/name
[...]
ฉันต้องการแยกไฟล์และชื่อไปที่, โฟลเดอร์ 2 สิ่งนี้สามารถทำได้ในฐานะหนึ่งซับ?
คำตอบ:
ใช้-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ลบโฟลเดอร์แรกโดยอัตโนมัติ ยิ่งตั้งค่าจำนวนมากเท่าใดโฟลเดอร์ที่ซ้อนกันจะถูกลบออก
คุณยังสามารถใช้--transformตัวเลือกเพื่อความยืดหยุ่นอีกเล็กน้อย ยอมรับการดำเนินการเปลี่ยน sed ใด ๆ
ตัวอย่างเช่นนี่คือวิธีที่ฉันแยก Linux tarball ไปยังไดเรกทอรีใหม่เพื่อให้ฉันสามารถใช้โปรแกรมแก้ไข:
tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
man tarผมอ่าน--strip-componentsไม่ได้จุด เป็นคนดี