7 zip резервное копирование
Обновлено: 05.07.2024
я гуглил и искал, но не могу найти команду, которую 7zip утилита командной строки использует для создания инкрементных резервных копий. Кто-нибудь может поделиться командой ?
должно быть просто, используйте это для создания и постепенного обновления архива:
на этой странице предлагает ссылку для опций обновления.
они переводятся следующим образом:
p0 - если" файл существует в архиве, но не совпадает с подстановочным знаком", то удалите файл из архива.
q3 - Если "файл есть в архиве, но не существует на диске", то удалите файл из архива и удалите его из файловой системы при извлечении.
r2 - Если "файл не существует в архиве, но существует на диске", то упакуйте файл в архив.
x2 - если "файл в архиве новее, чем файл на диске", то упакуйте старый файл в архив.
y2 - если "файл в архиве старше, чем файл на диске", то упаковать новый файл в архив.
z1 - если "файл в архиве такой же, как файл на диске" затем повторно упакованную версию файла.
w2 - если размер файла отличается, то упакуйте измененный файл в архив.
7-операция обновления zip позволяет создать вторичный архив с различиями (в том числе удаленными файлами), произошедшими с тех пор базовый/основной архив. Это правильно названо дифференциальной резервной копией (как указано в самом вопросе).
Я нашел отличную статью на эту тему в WPCTips "дифференциальные резервные копии с 7-zip" (архив). Они рекомендуют либо с помощью программы GUI (Тукан), или используйте этот рецепт для командной строки:
это немного отличается от 7zr u -up0q3r2x2y2z1w2 .7z предложенный ArtemGr:
- -u- сообщает, что главный архив не должен будьте изменены
- -up0q3r2x2y2z0w2! указывает целевой разностный архив и действие, которое необходимо выполнить для каждого файла для каждого условия/состояния: добавить новые или измененные файлы в файловой системе, удалить файлы, которые находятся только в архиве 7zip, игнорировать остальные.
на всякий случай, если вам интересно о специфике этого загадочного p0q3r2x2y2z0w2
вы можете легко сделать инкрементное резервное копирование, изменив направление во времени. Т. е. вы всегда держать самую последнюю резервную копию, а полную копию и сохранить дифференциальных файлов в прошлое.
базы Архив всегда содержит последнюю версию и с помощью применения "декрементов" шаг за шагом вы можете воссоздать более старые версии. С немного сценариев вы можете применить правильную нумерацию к декрементных файлов.
Задача: создать BAT-файл, который будет сжимать всё содержимое папки project на диске C:/ максимальным уровнем сжатия и помещать созданный архив в папку backup на том же диске.
Создаем BAT-файл
На диске C:/, создаем папку project. В эту папку поместите какие нибуть файлы, например, фото
В любом путом месте (например, рабочий стол) нажимаете правой кнопкой мыши и выбираем Создать->Текстовый документ.
Меняем расширение файла с .txt на .bat
Если у вас не отображается расширение, на Windows 10 зайдите в "Этот компьютер", перейдите во вкладку Вид и поставте галочку "Расширения имен и файлов"
Кликаем правой кнопкой мыши на созданный файл и нажимаем Изменить. Откроется обычный блокнот, в нем нам и нужно написать скрипт.
Пример кода:
"C:\Program Files\7-Zip\7z.exe" a -mx9 C:\backup\archive.7z C:\project
Расшифровка кода:
Готово! Сохраните внесенные изменения, закройте файл и запустите. Должен создаться архив в нашей папке backup
На этом можно было бы остановиться, но обязательно ли постоянно прописывать путь к программе 7zip? Что если не нужно архивировать не все файлы в папке? Как в название архива добавить дату, когда он был сделан?
Разберем каждый пункт по порядку.
Привязываем путь к программе 7zip к переменной
- Нажимаем правой кнопкой мыши на Этот компьютер->Свойства в появившемся окне в списке слева выбираем Дополнительные параметры системы->Переменные среды.
- В верхнем разделе Переменные среды пользователя для Ваш_user нажимаем Создать. В открывшемся окне указываем значения ниже, после жмем OK
- Имя переменной - любое удобное имя, которое будет обозначать программу 7zip
- Значение переменной - полный путь к программе с указанием exe файла
Готово! Теперь код будет выглядеть компактнее, в BAT-файле замените "C:\Program Files\7-Zip\7z.exe" на 7z
Пример кода:
Исключаем ненужные файлы из архивации
Для исключения файлов необходимо в конце скрипта добавить ключ -xr! , чтобы понять как он работает, просто изучите примеры.
-xr!file.jpg Исключаем файлы с именем и расширением file.jpg -xr!*.jpg Исключаем файлы с расширением .jpg, неважно имя файла -xr!file.* Исключаем файлы с именем file, неважно расширение файла -xr!file Исключаем папки с именем file -xr!file*.* Исключаем файлы, имя которых начинается на file%, например file01.txt в архив не попадет -xr!*file*.* Исключаем файлы, имя которых содержит %file%, например 01file01.jpg в архив не попадет Теперь на основе полученных данных модернизируйте BAT-файл, если необходимо
Пример кода:
Добавляем дату и время создания архива в название
В Window есть две системные переменные, которые будем использовать
DATE Возвращает текущую системную дату в формате: 01.01.2020 Time Возвращает текущее системное время в формате: 15:29:55,03 Чтобы добавить их в название файла архива, достаточно обозначить эти переменные знаком % с обоих сторон
Добавьте эти переменные в название архива, отделите их нижним подчеркиванием, чтобы дата и время не сливались и в конце скрипта с добавьте новую команду pause, чтобы BAT-файл не закрывался сразу, как по примеру ниже
Пример кода:
7z a -mx9 C:\backup\archive_%DATE%_%Time%.7z C:\project -xr!thumb.*
pauseСохраните и запустите!
После запуска должна возникнуть оишбка Синтаксическая ошибка в имени файла, имени папки или метке тома.
Причина проста: формат переменной Time 12:23:38, а в Windows в названии файлов запрещено испольвать двоеточия ":"
Для решения данной проблемы выведем только часы и минуты в название.
Пример кода:
3,2%.7z C:\project -xr!thumb.*
pauseРасшифровка кода:
Сохрание и запустите! Проблема решена, теперь названия архивных файлов будут выглядеть примерно так: archive_20.05.2020_13_33.7z
Рефакторинг и оптимизация завершены
"C:\Program Files\7-Zip\7z.exe" a -mx9 C:\backup\archive.7z C:\project3,2%.7z C:\project -xr!thumb.*
pauseПри необходимости можете настроить запуск данного файла по расписанию для этого переходите по ссылке
Приведенные ниже команды выполняются после перехода в каталог с установленным 7-Zip. Как правило, это:
cd "C:\Program Files\7-Zip"
Распаковать и заархивировать
7z <команда> <ключи> <пути к каталогам и файлам>
Распаковка
Синтаксис для распаковки:
7z <x или e> <архивный файл> -o"<путь, куда распаковываем>"
* ключ x распаковывает с сохранением каталожной структуры; e — все в одно место.
7z x c:\temp\archive.7z -o"c:\temp\"
* в данном примере мы распакуем файл c:\temp\archive.7z в папку c:\temp
Архивация
Синтаксис для архивирования:
7z a <ключи> <архивный файл> <объект архивирования>
7z a -tzip -mx5 -r0 c:\temp\archive.zip c:\temp
* в данном примере мы создадим zip-архив с уровнем компрессии 5; в архив попадет все содержимое всех каталогов; название для файла c:\temp\archive.zip; запаковываем все содержимое папки c:\temp.
7z a -mx1 c:\temp\archive.7z c:\temp\file1.txt c:\temp\file2.txt c:\temp\file3.txt
* в данном примере мы архивируем файлы c:\temp\file1.txt, c:\temp\file2.txt, c:\temp\file3.txt с низкой компрессией 1; в итоге будет получен архив c:\temp\archive.7z.
Резервное копирование с помощью 7-Zip
Один из самых распространенных примеров использования 7zip из командной строки — резервирование данных.
Для начала переходим в каталог с установленной программой:
* так как в пути имеется пробел, его необходимо писать в кавычках.
Сама команда выглядит следующим образом:
7z a -tzip -ssw -mx1 -pPassword -r0 C:\Temp\backup.zip C:\Data
* в данном примере мы архивируем содержимое папки C:\Data и сохраняем в виде файла C:\Temp\backup.zip.
* описание ключей смотрите ниже или командой 7z --help.Полный пример cmd-скрипта для резервного копирования:
set source="C:\Date"
set destination="C:\Temp"
set passwd="Password"
set dd=%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%
* данный скрипт заархивирует содержимое каталога C:\Data в файл C:\Temp\backup_<текущая дата>.zip. Полученный архив будет защищен паролем Password.
* содержимое необходимо сохранить в файле с расширением .cmd или .bat.Пример Powershell скрипта для резервного копирования:
$source = "C:\Date"
$destination = "C:\Temp"
$passwd = "Password"
$curdate = (Get-Date -UFormat "%d-%m-%Y")& "C:\Program Files\7-Zip\7z.exe" a -tzip -ssw -mx1 -p$passwd -r0 $destination\backup_$curdate.zip $source
* данный скрипт также заархивирует содержимое каталога C:\Data в файл C:\Temp\backup_<текущая дата>.zip. Полученный архив будет защищен паролем Password.
* содержимое необходимо сохранить в файле с расширением .ps1.Описание ключей и команд 7z
В синтаксисе работы с 7zip идут команды и ключи.
Описание основных команд
Команда Описание 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 КБ словаря.Полный список ключей и команд можно получить командой 7z --help.
Примеры
Исключение файлов и папок
Отдельно стоит рассказать про возможность исключения. Есть два варианта ее применения.
Первый — создать список исключений в отдельном файле.
Пример команды 7z:
7z.exe a -tzip -ssw -mx9 -r0 -x@exclus.txt C:\Temp\backup.zip C:\Data
* где exclus.txt — файл с исключениями.
Пример файла с исключениями:
* в данном примере мы исключаем каталог с именем test и все файлы с расширением tmp.
Второй — указать исключение в команде.
7z.exe a -tzip -ssw -mx9 -r0 -xr!Шаблон* C:\Temp\backup.zip C:\Data
Резервирование баз 1С
Данные базы 1С находятся в файлах с расширением .1CD. Для их резервирования используем команду:
Для наступления полного и тотального счастья в плане бэкапов информации на рабочем сервере решил отказаться от Acronis True Image в пользу обычной архивации данных с помощью 7-Zip.
Для выполнения поставленной задачи естественно использовал консольную версию архиватора.
После непродолжительного курения манов комманда приняла следующий вид:
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 строки:
Creating archive archive_name
Everything is Ok
А потом закатываю все в текстовый файл, для последующего изучения:
findstr /P /I /V «Compressing 7-Zip» >> log_file
Теперь дело за малым. Нужно зафутболить все три блока в одну последовательность команд:
Для того чтобы быстро создавать архив с помощью архиватора 7-zip, напишем такой скрипт и сохраним его с расширением *.bat:
Этот скрипт автоматически называет файл в соответствии с текущей датой. Чтобы скрипт запускался автоматически, можно создать в планировщике задач Windows задание и указать расписание: Панель управления – Администрирование – Планировщик заданий. В планировщике нажимаем Создать задачу, на вкладке Действие добавляем Запуск программы и указываем путь к нашему bat-файлу. Настраиваем расписание на вкладке Триггеры.
Такой приём позволяет не беспокоиться о том, что резервная копия важных данных будет не сделана.
Кстати, приведённый макрос %DATE% будет нормально форматировать дату только если язык системы – русский. Если ваша система имеет другой язык, то при форматировании даты могут возникнуть проблемы. В этом случае используйте %DATE% без подстрок:. d:\Baсkup\%DATE%.7z
Также можно создавать архивы с паролем. Это убережёт Ваши данные, если они попадут не в те руки. Всё что нужно для создания архива с паролем – добавить в конец предыдущего скрипта параметр -p, а сразу за ним без пробела пароль, например:
Можно также указать степень сжатия от 0 до 9, например, -mx9 означает максимальную степень сжатия.
Также имеет смысл убрать некоторые расширения файлов из создаваемого архива, например, временные *.tmp и *.cache файлы. Для этого нужно добавить их в список исключений вот таким образом: . Здесь аргумент -x обозначает «исключить» (eXclude), а восклицательный знак означает поисковый запрос (wildcard), который выбирает файлы с заданным расширением.
Полный перечень возможных параметров командной строки, передаваемых исполняемому файлу архиватора 7zip, приведён на рисунке:
Перечень аргументов командной строки архиватора 7-zip
Читайте также: