การแตกไฟล์เป็นชุด


33

เมื่อฉันลอง

 unzip filename.zip

มันได้ผล. อย่างไรก็ตามฉันต้องทำการคลายซิปชุดของไฟล์ zip

ทำไม:

 find . -name "*.zip" -print0 | xargs -0 unzip

หรือ

 ls *.zip | xargs unzip

ไม่ทำงาน?

ในทั้งสองกรณีฉันได้รับข้อความ "คำเตือน: ชื่อไฟล์ไม่ตรงกัน:"

คำตอบ:


48

คุณสามารถออกคำสั่ง:

$ unzip '*.zip'

ดูที่นี่สำหรับการอ้างอิง


ฉันไม่ได้พูดอย่างชัดเจน แต่พวกเขาไม่ได้อยู่ในไดเรกทอรีเดียวกัน ดังนั้นฉันต้องการผลลัพธ์ของการค้นหา
jeannoburto

4
ขอบคุณ สิ่งนี้อาจตรงกับคำถามจริงอย่างสมบูรณ์แบบ แต่สิ่งนี้สามารถแก้ไขปัญหาของฉันได้ ฉันพยายามunzip *แล้วมันกลับมาcaution: filename not matchedทุกไฟล์ แต่unzip '*.zip'ทำงานได้
อีวาน

27

คำสั่งของคุณไม่ทำงานเพราะไฟล์ต่าง ๆ วางไว้บนบรรทัดคำสั่งเดียวกัน ในขณะที่ใช้งานได้กับโปรแกรมส่วนใหญ่unzipจะใช้อาร์กิวเมนต์ตัวแรกเป็นไฟล์ zip และส่วนแรกเป็นไฟล์ที่จะแยกออกมา คุณต้องดำเนินการคำสั่งหนึ่งครั้งสำหรับแต่ละไฟล์:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

หรือ

find . -name '*.zip' -exec unzip {} \;

ส่วนที่สองดูเหมือนว่าจะดีกว่าในกรณีที่มีไฟล์จำนวนมากจริงๆ (มิฉะนั้นจะบ่นว่าคำสั่งยาวเกินไปกับ xargs)
Recct

5

ในทุบตีคุณสามารถทำต่อไปนี้:

for i in *.zip; do
    unzip "$i"
done

นอกจากนี้ยังunzipสามารถใช้-dสวิตช์เพื่อให้คุณสามารถกำหนดเป้าหมายผลลัพธ์ไปยังสถานที่ที่แตกต่างกัน

ตัวอย่างเช่น:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

1

มีวิธีแก้ปัญหาที่ง่ายกว่าการวนลูปที่ระบุด้านบนใช้-dแฟล็กไดเร็กทอรี:

unzip -o somefiles.zip -d $directoryPath

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