ฉันจะสร้างไฟล์. zip สำหรับแต่ละโฟลเดอร์ภายในโฟลเดอร์อื่นได้อย่างไร


18

ภายใต้โฟลเดอร์images\ฉันมีโฟลเดอร์ต่อไปนี้:

  • Usa\
  • Italy\
  • Japan\

ฯลฯ ..

ฉันต้องการสคริปต์ที่สร้างได้.zipสำหรับแต่ละโฟลเดอร์เหล่านี้ดังนั้นผมจึงมีusa.zip, ,italy.zipjapan.zip

ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


10

ฉันถือว่านี่เป็น Windows เพราะคุณกำลังใช้แบ็กสแลช

รับ7za.exe (รุ่นบรรทัดคำสั่งของ7-Zip ) %PATH%และวางไว้ในของคุณ

จากนั้นเรียกใช้สิ่งนี้ภายในImages\ไดเรกทอรีของคุณ:

for /f "tokens=* usebackq" %G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%~G.zip" "%~G"

หรือในชุดสคริปต์:

for /f "tokens=* usebackq" %%G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%%~G.zip" "%%~G"

วิธีนี้ใช้ไม่ได้หากโฟลเดอร์มีช่องว่างในชื่อ
jiggunjer

@jiggunjer ใช่คุณพูดถูก ฉันได้กำหนดให้ทำงานกับช่องว่างในชื่อโฟลเดอร์
Paradroid

1
สิ่งนี้ใช้ได้แม้กับ 7zip แบบปกติ ฉันอัปเดต 7za เป็น "C: \ Program Files \ 7-Zip \ 7z.exe" และทำงานได้โดยไม่มีปัญหา
user1324161

8

สมมติว่าคุณอยู่บน Linux คุณสามารถใช้ Bash script เช่นนี้:

  #!/bin/bash

  IFS=$'\n'

  for f in $(find "$1" -mindepth 1 -maxdepth 1 -type d ); do
    zip -r "$f" "$f"
  done

สคริปต์นี้จะนำอาร์กิวเมนต์แรกมาเป็นโฟลเดอร์ในกรณีนี้รูปภาพและทำการคืนระดับหนึ่งลึกเพื่อให้ได้โฟลเดอร์ทั้งหมดของคุณ (สหรัฐอเมริกาอิตาลีและญี่ปุ่น) และบีบอัดไว้ในตำแหน่งเดียวกัน

มันจะไม่ลบไฟล์ zip เก่าหรือโฟลเดอร์ต้นทาง Zip นั้นฉลาดพอที่จะตรวจจับไฟล์ zip ที่มีอยู่และอัปเดตเมื่อทำงานอีกครั้ง อย่างไรก็ตามหากคุณลบไฟล์ในโฟลเดอร์ซอร์สไฟล์นั้นจะไม่ถูกลบในไฟล์ซิป คุณอาจหลีกเลี่ยงพฤติกรรมนี้โดยการลบไฟล์ที่มีอยู่ก่อน


ฉันใช้สคริปต์ Linux ที่ sponiro โพสต์และเพิ่มบรรทัดที่จุดเริ่มต้นเพื่อลบโฟลเดอร์: ค้นหา $ 1 -type d | xargs rm -rf
genevish

7

คุณสามารถใช้Winrarได้

Add to archiveเลือกโฟลเดอร์ของคุณทั้งหมดคลิกขวาและเลือก ตอนนี้เลือกตัวเลือกPut each file to separate archiveภายใต้แท็บFiles:

ป้อนคำอธิบายรูปภาพที่นี่

คลิกตกลงและคุณทำเสร็จแล้ว หากคุณต้องการไฟล์. zip แทนที่จะเป็น. rar เพียงเลือกZIPในGeneralแท็บด้านArchive formatล่าง


0

นี้คำตอบโดยMVGทำงานให้ฉันบน Ubuntu:

คุณสามารถใช้วงนี้ในbash:

for i in */; do zip -r "${i%/}.zip" "$i"; done

iเป็นชื่อของตัวแปรลูป */หมายถึงทุกไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันและจะรวมเครื่องหมายสแลชต่อท้ายในชื่อเหล่านั้น ตรวจสอบให้แน่ใจว่าคุณcdถูกที่แล้วก่อนดำเนินการนี้ "$i"เพียงชื่อไดเรกทอรีที่รวมถึงเครื่องหมายทับ เครื่องหมายคำพูดให้แน่ใจว่าช่องว่างในชื่อไดเรกทอรีจะไม่ทำให้เกิดปัญหา ${i%/}เป็นเหมือน$iแต่มีการลบเครื่องหมายสแลชต่อท้ายดังนั้นคุณสามารถใช้เพื่อสร้างชื่อของไฟล์ซิป

หากคุณต้องการดูวิธีการทำงานรวมถึงechoก่อนzip และคุณจะเห็นคำสั่งที่พิมพ์แทนการดำเนินการ

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