Как я могу создать файл .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 Да, ты прав. Я исправил это для работы с пробелами в именах папок.
парадроид

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-файлы и обновлять их при повторном запуске. Однако если вы удалите файл в исходных папках, он не будет удален в zip-файлах. Вы можете обойти это, предварительно удалив существующие файлы.


Я использовал скрипт Linux, который опубликовал sponiro, и добавил строку в начале, чтобы удалить папки: find $ 1 -type d | xargs rm -rf
женева

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перед zip и вы увидите напечатанные команды вместо выполненных.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.