no-style

Архивация папки в ZennoPoster


Архивация папки программой 7zip

Я уже давным давно отказался от архиватора rar, вместо него я использую бесплатный 7zip. Скачиваем и устанавливаем, всё как обычно.

По стандарту он ставится в папку C:\Program Files\7-Zip







Синтаксис 7zip

Общий синтаксис

7z <команда> <ключи> <пути к каталогам и файлам>


Распаковка

7z <x или e> <архивный файл> -o"<путь, куда распаковываем>"

ключ x распаковывает с сохранением структуры каталогов
e — все в одно место.



Архивация

7z a <ключи> <архивный файл> <объект архивирования>



Описание основных команд

Команда Описание
a Добавление файлов в архив. Если архивного файла не существует, создает его.
d Удаление файла из архива
e Извлечение файлов из архива. Все файлы оказываются в одной папке.
l Вывод содержимого архива.
rn Переименовывание файла внутри архива.
u Обновление файлов в архиве. Если файла нет, создает новый.
x Извлечение файлов из архива. Пути сохраняются.



Описание ключей

Часто используемые

Ключ Описание
-t Тип архива. По умолчанию создаются файлы в формате 7z. Примеры, -tzip, -tgz
-ssw Включить файл в архив, даже если он в данный момент используется. Для резервного копирования очень полезный ключ.
-mx Уровень компрессии. 0 - без компрессии (быстро), 9 - самая большая компрессия (медленно). Например, -mx4
-p Пароль для архива. Например, -pStrong2!3paSsword
-o Задает директорию, например, в которую будут распакованы файлы.
-r Рекурсивное архивирование для папок. Задается числом от 0 (все каталоги) до количества уровней каталогов, которые нужно включить в архив.



Другие полезные ключи

Ключ Описание
-sdel Удалить файлы после создания архива.
-sfx Создание самораспаковывающегося sfx-архива.
-y Утвердительно ответить на все вопросы, которые может запросить система.
-x Исключить файлы или папки из архива.
-v Позволяет разбить архив на фрагменты. Если указать -v1g, то архив будет разбит на части по 1 Гб.
-mmt Количество потоков процессора, которые можно задействовать для работы программы. -mmt=4 укажет работать в четыре потока.
-m Задает метод сжатия. Доступны варианты:
- LZMA: базовый метод для сжатия 7z. Быстрое сжатие и декомпрессия.
- LZMA2: метод по умолчанию для 7z. Поддерживает несколько процессорных потоков.
- PPMd: метод PPMdH Дмитрия Шкарина с небольшими изменениями. Хорошо подходит для текстовых файлов.
- BZip2: на основе алгоритма BWT. Также хорош для текстовых файлов.
- Deflate: стандартный метод для форматов ZIP и GZip. Сжатие не очень хорошее, но высокая скорость работы. Поддерживает только 32 КБ словаря.
- Deflate64: аналогичен Deflate, но с поддержкой 64 КБ словаря.






Приступаем

В шаблоне создадим кубик Обработка переменных > Положить результат в переменную (обычно я использую переменную DATE)

Добавляем внутрь желаемый формат даты, я для примера буду использовать такой:

{-TimeNow.Date-yyyy.MM.dd_HH-mm-}
zenno archivate-1

После выполнения этого экшена переменная DATE будет содержать дату в таком формате -2022.06.24_17-52. Подробнее про дату можно почитать в этом топике.



Теперь добавляем кубик Свой код > Запуск программы.

В свойствах кубика в разделе Исполняемый фаил вписываем

C:\Program Files\7-Zip\7z.exe

В разделе Параметры запуска необходимо прописать команду для архивации

a -tzip -mx5 -r0 Папка_куда_будет_сохранён_архив\имя_архива.zip Папка_которую_необходимо\архивировать

Остаётся только указать необходимые данные - что и куда хотим архивировать. Желтым цветом указан путь куда будет сохранён архив. Зелёным отмечена папка, которую архивируем.

a -tzip -mx5 -r0 {-Project.Directory-}files\backup\users{-Variable.DATE-}.zip {-Project.Directory-}files\users

Так же подставляем переменную DATE к имени архива, чтобы каждый раз генерировалась текущая дата, иначе если мы никак не уникализируем название фаила, то он будет перезаписываться каждый раз.

zenno archivate-2-start

Если выполнить этот кубик - откроется консоль, в которой будет виден процесс архивации, после чего будет создан архив.

zenno archivate-2-console

После успешного создания архива нам напишут Everything is Ok. Данную фразу будем использовать для проверки результата, об этом ниже.







Проверка что всё ок

У нас есть возможность ограничивать время выполнения программы. Когда действие важное и мы не знаем сколько времени точно оно займёт желательно перестраховаться.

Для этого впишем примерное время выполнение например 300 секунд

Теперь необходимо сохранить STD OUT в какую нибудь переменную. В STD OUT находится вывод того что было в консоли в момент создания архива. Я буду хранить в переменной TMP2.

На остальные переменные EXIT CODE и STD ERR можете не обращать внимания, они нам не нужны.

Отмечаем чекбокс на пункте Не показывать окно процесса чтобы не мешало всплывающее окно с консолью. Таким образом получаем:

zenno archivate-2

Теперь выполняя этот кубик в переменной TMP2 будет содержаться необходимая нам информация, остается только спарсить её и обработать.


Создаём кубик Обработка текста > Regex с таким содержанием:

Everything\ is\ Ok.*?
zenno archivate-3

Результат будем сохранять в переменную check



Следующим шагом экшеном Логика > IF, проверяем содержит ли переменная check текст Everything is Ok.

'{-Variable.check-}'=='Everything is Ok'

Если содержит то всё выполнилось без ошибок.


zenno archivate-4





В результате полная последовательность действий выглядит вот так:

zenno archivate-5

Комментарии