Как создать .zip-файл для каждой папки внутри другой папки?

Как создать .zip-файл для каждой папки внутри другой папки?

В папке images\у меня есть следующие папки:

  • Usa\
  • Italy\
  • Japan\

и т. д..

Мне нужен скрипт, который создает .zipдля каждой из этих папок, поэтому у меня есть usa.zip, italy.zip, japan.zip.

Как мне это сделать?

решение1

Вы можете использоватьWinRar-файлдля этого.

Выберите все ваши папки, щелкните правой кнопкой мыши и выберите Add to archive. Теперь выберите опцию Put each file to separate archiveпод вкладкой Files:

введите описание изображения здесь

Нажмите OK и все готово. Если вы хотите файлы .zip вместо .rar, просто выберите ZIPна Generalвкладке под Archive format.

решение2

Я предполагаю, что это Windows, поскольку вы используете обратные косые черты.

Получать7za.exe(версия командной строки7-молния) и поместите его в свой %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"

решение3

Если вы используете Linux, вы можете использовать такой скрипт Bash:

  #!/bin/bash

  IFS=$'\n'

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

Этот скрипт примет первый аргумент в качестве папки (в данном случае — images) и выполнит рекурсию на один уровень вглубь, чтобы получить все ваши папки (США, Италия и Япония) и заархивировать их в одном месте.

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

решение4

ЭтототвечатькМвГУ меня сработало на Ubuntu:

Вы можете использовать этот цикл в bash:

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

i— имя переменной цикла. */означает каждый подкаталог текущего каталога и будет включать в себя завершающий слеш в этих именах. Убедитесь, что вы находитесь cdв правильном месте, прежде чем выполнять это. "$i"просто называет этот каталог, включая завершающий слеш. Кавычки гарантируют, что пробелы в имени каталога не вызовут проблем. ${i%/}похоже $i, но с удаленным завершающим слешем, поэтому вы можете использовать это для создания имени zip-файла.

Если вы хотите увидеть, как это работает, добавьте echoперед , zip и вы увидите, что команды будут напечатаны, а не выполнены.

Связанный контент