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:\project

    3,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

    Перечень аргументов командной строки архиватора 7-zip

    Читайте также: