สร้างไดเรกทอรีเป้าหมายเมื่อทำการแยก tarball


25

เป็นไปได้ไหมที่จะสร้างไดเรกทอรีเป้าหมายคล้ายกับmkdir -pที่ฉันสามารถกำหนดไดเรกทอรีเป้าหมายที่ไม่มีอยู่ภายในคำสั่ง tar ของฉันและ tar จะสร้างไดเรกทอรีให้ฉัน

ฉันรู้ว่าฉันสามารถเปลี่ยนเส้นทางการส่งออกไปยังไดเรกทอรีที่ใช้tar -C /target/dirแต่ไม่ได้ผลหากไดเรกทอรีเป้าหมายไม่มีอยู่จริง


4
หากไม่สามารถทำได้คุณสามารถสร้างชื่อแทนเชลล์ได้ตลอดเวลา
n0pe

คำตอบ:


38
mkdir -p /target/dir && tar -C /target/dir

3
ไม่มีการป้อนช้อนให้ตรงและตรงประเด็น
Amado Martinez

10
การเปลี่ยนแปลงเล็กน้อยที่แนะนำ:mkdir -p /target/dir && tar -C $_
Mark Melville

@ MarkMelville อธิบายให้เราทราบว่า $ _ ควรจะอยู่ที่นี่
Suhayb

@Suhayb $_เป็นพารามิเตอร์พิเศษใน Bash ที่ขยายไปยังอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้า
ConceptRat

12
tar -xvf bash.html_node.tar.gz --one-top-level

จาก man page ของคำสั่ง tar

--one-top-level[=DIR]

    แตกไฟล์ทั้งหมดลงในDIRหรือหากใช้โดยไม่มีอาร์กิวเมนต์ลงในไดเรกทอรีย่อยที่ตั้งชื่อโดยชื่อฐานของไฟล์เก็บถาวร (ลบส่วนต่อท้ายการบีบอัดมาตรฐานที่รู้จักโดย--auto-compress)

----- ทดสอบ

ทดสอบ 1

tar zxvf ../aaa.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree aaa
aaa/
├── 111
└── 222

// หากชื่อ tgz เหมือนกับ root_dir ของไฟล์เก็บถาวรจะไม่มีผลกระทบอื่น

ทดสอบ 2

mv ../aaa.tgz ../bbb.tgz

tar zxvf ../bbb.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree bbb
bbb
└── aaa
    ├── 111
    └── 222

// หากชื่อ tgz ไม่เหมือนกับ root_dir ของไฟล์เก็บถาวรให้สร้าง dir ระดับบนสุด


3
ต้องการ GNU tar หรือไม่ bsd tar เริ่มต้นของ Mac ไม่มีตัวเลือกนี้
เคอร์ติส Yallop

1
ใช่สิ่งนี้ควรถูกกล่าวถึงอย่างชัดเจนยิ่งขึ้น
kcrisman

5

ทำให้ฉันมีเหตุผลมากขึ้น: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdirทำให้โฟลเดอร์แม้ว่าฉันไม่เข้าใจ-pสวิตช์มากนัก &&ให้คุณรันคำสั่งที่สอง ฉันใช้สวิตช์ tar ทั่วไป แต่ท้ายที่สุด-Cจะใช้เพื่อเปลี่ยนไดเรกทอรีและแยกไปยังตำแหน่งที่ต้องการ

การอ้างอิง: แยกไฟล์ที่มีอยู่ในไฟล์เก็บถาวร-tar-gz-to-new-directory-named-archive


2
สวิตช์ -p จะไม่เกิดข้อผิดพลาดหากมีไดเรกทอรีอยู่แล้ว
David

@David มันจะสร้างไดเรกทอรีที่ไม่มีอยู่ชั้นนำใด ๆ เช่นมันจะสร้าง /createหากไม่มีอยู่
Antonio Pérez

1

หากคุณไม่รู้จักพา ธ ที่จะสร้าง ... รับ
พา ธ ที่จำเป็นจากไฟล์ tar จากนั้นสร้างพวกเขา ...

for P in \`tar tvf tarfile.tar |tr -s [:space:] |cut -d' ' -f6\`; do  
    C=\`echo "${P: -1}"\`  #get the last character  
    if [ $C = '/' ]; then  
        echo "Found directory: $P"  
        mkdir -p $P  
    fi  
done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.