แตกไฟล์ zip หลายไฟล์แต่ละไฟล์ในโฟลเดอร์ใหม่ที่มีชื่อเดียวกันผ่านทางหน้าจอ Ubuntu


36

ฉันมีไฟล์ zip หลายไฟล์คือ a.zip, b.zip, c.zip, ...และฉันต้องการแยกไฟล์เหล่านี้ออกเป็นโฟลเดอร์ใหม่a, b, c, ...ตามลำดับผ่านเทอร์มินัล

ที่จริงแล้วสิ่งที่ฉันต้องการคือวิธีการแก้ปัญหาที่ฉันสามารถใช้ในภายหลังด้วยfindเพราะจริง ๆ แล้วฉันมีหลายโฟลเดอร์2014, 2013, 2012, ...แต่ละไฟล์มีไฟล์ซิปจำนวนมากa.zip, b.zipเป็นต้นถ้าฉันทำfind . -name "*.zip" -exec {} unzip \;มันจะแตกไฟล์ทั้งหมดและนำไปไว้ในโฟลเดอร์พาเรนต์ที่เกี่ยวข้อง


คำตอบ:


70

คุณควรใช้-dตัวเลือกunzip เพื่อตั้งค่าไดเรกทอรีสำรองสำหรับเนื้อหาเก็บถาวร

unzip -d a a.zip
unzip -d b b.zip

และอื่น ๆ ภายในfindนิพจน์คุณควรจะสามารถหาชื่อของไดเรกทอรีจากชื่อของไฟล์ zip โดยใช้การขยายพารามิเตอร์ของเชลล์เช่น

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

ทดสอบก่อนโดยการเพิ่มechoเช่น

find -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;

หรือสิ่งที่ชอบ

while read -rd $'\0' f; do 
  unzip -d "${f%.*}" "$f"
done < <(find -name '*.zip' -print0)

1
+1 สำหรับtest it first…ส่วน
mrzmyr

2
findต้องการไดเรกทอรีดังนั้นfind . -name ...
SLF

@slf POSIXly ใช่ - แต่ไม่ใช่ในกรณีของ GNU find( "หากไม่มีการระบุจุดเริ่มต้น.จะถือว่า" )
steeldriver

10

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

วิธีการค้นหานั้นบ้าเกินความซับซ้อนโดยไม่มีเหตุผล

for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done

นี่คือคำตอบที่ดีที่สุดสำหรับคำถามในมือ อันที่ก่อนหน้านี้ไร้สาระและอันที่ตามมาก็ไม่ได้จัดเรียงไว้ในโฟลเดอร์รูทตามลำดับ
TheMegolith

วิธีการหนึ่งที่จะไปเกี่ยวกับการสร้างไดเรกทอรีโดยไม่ต้อง.zipต่อท้าย? ขอเพื่อน
dashard

คำตอบไม่ได้สร้างไดเรกทอรีที่มีคำต่อท้าย. zip ซึ่งเป็นจุดที่อยู่ในส่วนที่อยู่ในเครื่องหมายวงเล็บ
kencinder

6

ใช้ง่าย

unzip '*.zip' -d /home/user/folder/

10
นอกจากว่าฉันขาดอะไรบางอย่างไปสิ่งนี้จะทำการคลายซิปทุกอย่างลงใน / home / user / folder ไม่ใช่ใน / home / user / folder / a และ / home / user / folder / b
M. Justin

0

ฉันยังต้องทำสิ่งนี้โดยใช้ unrar สิ่งนี้สามารถทำได้โดยการปรับเปลี่ยนเล็กน้อยในรหัสของ kencinder

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

PS: ฉันต้องการเพิ่มเป็นความคิดเห็น แต่ฉันมีคะแนนชื่อเสียงไม่พอ!

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