แตกไฟล์จำนวนมากไปยังไดเรกทอรีที่กำหนด


1

ในระยะสั้นฉันไม่แน่ใจว่าสิ่งที่ฉันทำผิด แต่โดยทั่วไปสิ่งที่ฉันต้องการจะทำคือวนรอบทุกไฟล์ zip และ unzip เนื้อหาในไดเรกทอรีที่มีชื่อ zip

ตัวอย่าง:

ไฟล์: a.zip, b.zip

คำสั่ง

for i in `ls *.zip`; do unzip $i -d  `echo $i | cut -f1 -d'.'` ; done

คาดว่า:

โฟลเดอร์ a ด้วยเนื้อหาของ a.zip โฟลเดอร์ b ด้วยเนื้อหาของ b.zip

เกิดอะไรขึ้น:

ไม่พบไฟล์ซิป   เปิดเครื่องรูด: ไม่สามารถค้นหาหรือเปิด a.zip, a.zip.zip หรือ a.zip.ZIP

เคล็ดลับเกี่ยวกับสิ่งที่อาจจะผิดหรือเปล่า?


1
คุณตรวจสอบการอนุญาตอ่านไฟล์ zip เหล่านั้นหรือไม่

คำตอบ:


1

ฉันแนะนำให้ใช้ find โดยไม่ต้องแยกวิเคราะห์ผลลัพธ์ของ ls หรือ find ตัวเองเพื่อหลีกเลี่ยงปัญหาที่เกี่ยวข้องกับ ในที่สุดตัวละครพิเศษก็ปรากฏในชื่อไฟล์ .

 find . -name "*.zip" -exec bash -c ' unzip "$0" -d "${0%*.zip}"  '  {} \;

ตามที่แนะนำในคำตอบที่หายไป โดยไม่จำเป็นต้องสร้างไดเรกทอรีสำหรับแต่ละไฟล์ มันควรจะทำด้วย unzip '*zip'. สังเกตคำพูด '. หากไฟล์ซิปถูกสร้างขึ้นด้วยสิ่งที่คล้ายกับ zip -r myfolder.zip myfolder/ คำสั่ง unzip ง่าย ๆ จะสร้างโครงสร้างไดเรกทอรี BTW ในกรณีนี้มันใช้งานได้ดีแม้จะมีเครื่องหมายคำพูดคู่ unzip "*zip" หรือหลบหนี * กับ unzip \*zip.
Hastur

1

สิ่งนี้น่าจะใช้ได้:

for i in *.zip; do
newdir="${i:0:-4}" && mkdir "$newdir"
unzip "$i" -d  "$newdir"
done

... และมันจะจนกว่าชื่อไฟล์ทั้งหมดของคุณจะเป็น ไม่มีตัวอักษรพิเศษหรือช่องว่าง มิฉะนั้นจะสร้างข้อผิดพลาดและออกด้วยรหัสข้อผิดพลาด ( echo $? ) 1. โดยทั่วไปไม่แนะนำ เพื่อแยกผลลัพธ์ของ ls
Hastur

ใช่, ls ไม่แนะนำที่นี่ฉันใช้เพราะฉันเพิ่งแก้ไขโพสต์ดั้งเดิมของ OP ละเว้น ls ตอนนี้
Jahid

ด้วยคำพูด (เช่น "$i" ) ควรมีที่ว่างและขึ้นบรรทัดใหม่ อย่าลืมเพิ่มใบเสนอราคา " เพื่อจัดการกับปัญหาเหล่านั้น (ตรวจสอบด้วยเช่น cp c.zip a$'\n'b.zip มันจะสร้างไฟล์ที่มีบรรทัดใหม่ระหว่าง a และ b.zip ถ้าไฟล์ c.zip มี)
Hastur

-1

ใช้สิ่งนี้:

for i in `find | grep .zip$`;do unzip $i;done

แก้ไข

คำตอบก่อนหน้านี้ผิด (;

for i in `find | grep .zip$ | sed 's@.zip$@@'`;do mkdir $i;unzip $i.zip -d $i;done

ลองอันนี้!


ที่จะไม่แยกเนื้อหาสำหรับไดเรกทอรีที่ระบุ :)
thclpr

ใช่พลาดส่วนนั้น (; ฉันกำลังแก้ไขคำตอบของฉันตอนนี้

ตกลงฉันกำลังทำอาหารในจุดที่คุณยอมรับในขณะเดียวกัน
thclpr

มันทื่อได้รับ แต่ควรจะทำงาน แต่ถ้าคำตอบที่สง่างามมากขึ้นมาถึงอย่าลังเลที่จะยอมรับมัน

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