Як я можу створити .zip файл для кожної папки в іншій папці?


18

Під папкою images\я маю такі папки:

  • Usa\
  • Italy\
  • Japan\

тощо.

Я хочу , щоб сценарій , який створює .zipдля кожного з цих папок, тому у мене є usa.zip, italy.zip, japan.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 Так, ти маєш рацію. Я зафіксував це для роботи з пробілами у назвах папок.
парадороїд

1
Це працює навіть у звичайному виконанні 7zip. Я оновив 7za до "C: \ Program Files \ 7-Zip \ 7z.exe", і він працював без проблем.
user1324161

8

Якщо припустити, що ви працюєте в Linux, ви можете використовувати такий сценарій Bash:

  #!/bin/bash

  IFS=$'\n'

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

Цей скрипт буде приймати перший аргумент як папку, в цьому випадку зображення, і повторювати рівно на один рівень, щоб отримати всі ваші папки (США, Італія та Японія) та зафіксувати їх там же.

Він не буде видаляти старі поштові файли або папки-джерела. Zip досить розумний, щоб виявити існуючі поштові файли та оновити їх при повторному запуску. Однак якщо ви видалите файл у папках-джерелах, він не буде видалений у zip-файлах. Ви можете обійти цю поведінку, попередньо видаливши існуючі файли.


Я використав сценарій Linux, який розмістив споніро, і додав рядок на початку для видалення папок: знайти $ 1 -типу 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але з вилученою косою косою рисою, так що ви можете використовувати це для побудови імені zip-файлу.

Якщо ви хочете побачити, як це працює, включіть echoкоманду a перед zip і ви побачите команди, надруковані замість виконаних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.