Архивирование и backup с 7z
Разные есть подходы к решению задач. Программки бывают громоздкими и стоящими денег. какие то это оправданно стоят а какие то нет.
Поэтому командная строка может элегантно помочь выйти из ситуации в совокупности с утилитой…
взял с https://habrahabr.ru/post/72636/ + https://www.dmosk.ru/miniinstruktions.php?mini=7zip-cmd
Пример
1)После непродолжительного курения манов комманда приняла следующий вид:
7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_for_the_archive working_dir
Поподробней об использованных ключах:
-tzip формат архива установлен в zip, без этого ключа умолчальный формат 7z;
-ssw принудительная упаковка файлов, которые в данный момент открыты для записи (мало ли кто-то засиделся на работе и что-то там правит);
-mx7 высокая степень сжатия (7), можно поставить и 5 (нормальное сжатие), тогда процесс пойдет побыстрее;
-r0 (это ноль, а не буква О) исключения, которые будут прописаны дальше обрабатываются только в рабочем каталоге;
-x@exclusions.txt это собственно говоря файл со списком исключений, которые не будем архивировать. Каждая строка файла — новое исключение. Можно использовать маски типа *.ext и т.п. Если исключение не много, то можно обойтись и без файла, в таком случае ключ примет следующий вид: -x!*.ext;
full_path_for_the_archive это соответственно путь и имя нового архива;
working_dir это папка, которая подлежит упаковке.
Для пущего удобства можно использовать в имени архива %date%.
В связи с тем, что архивировать нужно разные папки в разные архивы, объемами 10-15 гигов, то резонно использовать последовательность команд, дабы не создавать кучу правил в планировщике и не думать сколько времени займет весь этот процесс. Соответственно для этих целей использую объединение команд с помощью &&. Если использовать &, то все команды будут выполняться одновременно, что меня никак не устраивает, с && — последовательно при удачном завершении предыдущей команды.
Помимо всего прочего желательно иметь логи, чтоб быть в курсе, а не случилось ли чего. Это можно легко реализовать с помощью инструкции ‘>>’, которая сохраняет вывод в консоль в текстовый файл. Однако проблема в том, что 7zip вываливает в консоль кучу информации, в том числе и об архивации каждого нового файла. Очевидно, что на объемах в несколько тысяч файлов вся эта инфа в логах нужна как мертвому припарок. Соответственно требуется исключить все ненужные строки, оставив те, где есть информация о названии создаваемого архива, результат архивации и информацию об ошибках, коли таковые появятся.
Тут на помощь приходит команда FINDSTR. В моем случае она принимает следующий вид:
findstr /P /I /V «Compressing 7-Zip»
Сначала пара слов об использованных ключах:
/P пропускает строки, содержащие непечатные символы;
/I на всякий случай игнорирую регистр букв;
/V » « непосредственно перечень слов для поиска в строках и последующего исключения этих строк.
В итоге на выходе этой команды имеем 3 строки:
Scanning
Creating archive archive_name
Everything is Ok
А потом закатываю все в текстовый файл, для последующего изучения:
findstr /P /I /V «Compressing 7-Zip» >> log_file
Теперь дело за малым. Нужно зафутболить все три блока в одну последовательность команд:
7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_for_the_archive working_dir | findstr /P /I /V «Compressing 7-Zip» >> log_file.%date%.txt
2)
@echo off
set source=»C:\Date»
set destination=»C:\Temp»
set passwd=»Password»
set dd=%DATE:~0,2%
set mm=%DATE:~3,2%
set yyyy=%DATE:~6,4%
set curdate=%dd%-%mm%-%yyyy%
«C:\Program Files\7-Zip\7z.exe» a -tzip -ssw -mx1 -p%passwd% -r0 %destination%\backup_%curdate%.zip %source% >> backup_log.%date%.txt
Описание ключей команды 7z
Общий синтаксис:
7z <команда> <ключи> <архивный файл> <объект архивирования>
Описание основных команд
Команда | Описание |
---|---|
a | Добавление файлов в архив. Если архивного файла не существует, создает его. |
d | Удаление файла из архива |
e | Извлечение файлов из архива. Все файлы оказываются в одной папке. |
l | Вывод содержимого архива. |
rn | Переименовывание файла внутри архива. |
u | Обновление файлов в архиве. Если файла нет, создает новый. |
x | Извлечение файлов из архива. Пути сохраняются. |
Описание ключей
Часто используемые:
Ключ | Описание |
---|---|
-t | Тип архива. По умолчанию создаются файлы в формате 7z. Примеры, -tzip, -tgz |
-ssw | Включить файл в архив, даже если он в данный момент используется. Для резервного копирования очень полезный ключ. |
-mx | Уровень компрессии. 0 — без компрессии (быстро), 9 — самая большая компрессия (медленно). |
-p | Пароль для архива. |
Другие полезные ключи:
Ключ | Описание |
---|---|
-o | Задает директорию, например, в которую будут распакованы файлы. |
-sdel | Удалить файлы после создания архива. |
-sfx | Создание самораспаковывающегося sfx-архива. |
-y | Утвердительно ответить на все вопросы, которые может запросить система. |
-x | Исключить файлы или папки из архива. |
Полный список ключей и команд можно получить командой 7z —help.
Исключение файлов и папок
Отдельно стоит рассказать про возможность исключения. Есть два варианта ее применения.
Первый — создать список исключений в отдельном файле.
Пример команды 7z:
7z.exe a -tzip -ssw -mx9 -r0 -x@exclus.txt C:\Temp\backup.zip C:\Data
* где exclus.txt — файл с исключениями.
Пример файла с исключениями:
test
*.tmp
* в данном примере мы исключаем каталог с именем test и все файлы с расширением tmp.
Второй — указать исключение в команде.
7z.exe a -tzip -ssw -mx9 -r0 -xr!Шаблон* C:\Temp\backup.zip C:\Data