16

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

Спасибо

Кстати, я нашел эту ссылку: http://wmug.co.uk/wmug/b/sean/archive/2009/03/20/powershell-amp-7zip-incremental-backup-solution.aspx . Но, похоже, это для дифференциальных резервных копий, даже несмотря на то, что это говорит о добавочной.

4 ответа4

8

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

7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}

Эта страница предлагает ссылку для параметров обновления.

Они переводятся следующим образом:
p0 - Если «Файл существует в архиве, но не соответствует шаблону», удалите файл из архива.
q3 - Если «Файл существует в архиве, но не существует на диске», то удалите файл из архива и удалите его из файловой системы после извлечения.
r2 - Если «Файл не существует в архиве, но существует на диске», поместите файл в архив.
x2 - Если «Файл в архиве новее, чем файл на диске», то упакуйте старый файл в архив.
y2 - Если «Файл в архиве старше, чем файл на диске», поместите новый файл в архив.
z1 - Если "Файл в архиве совпадает с файлом на диске", используйте упакованную версию файла повторно.
w2 - Если размер файла отличается, упакуйте измененный файл в архив.

6

Если бы вы делали инкрементное резервное копирование, вам нужно было бы предоставить 7-zip со списком измененных файлов (с -i@fileList), и вам нужно было бы как-то разработать этот список. На https://superuser.com/a/862394/476076 вы можете найти командную строку unix/cygwin, которая будет использовать сигнатуры md5 для создания fileList.

Операция обновления 7-zip позволяет создать вторичный архив с различиями (включая удаленные файлы), возникающими со времени основного / первичного архива. Это правильно называется дифференциальной резервной копией (как указано в самом вопросе).

Я нашел отличную статью на эту тему на WPCTips "Дифференциальное резервное копирование с 7-zip"(в архиве). Они рекомендуют либо использовать программу с графическим интерфейсом (Toucan), либо использовать этот рецепт для командной строки:

7z u {base archive.7z} {folder to archive} -u- -up0q3r2x2y2z0w2!{differential.7z}

Это немного отличается от 7zr u -up0q3r2x2y2z1w2 {archive}.7z {path} предложенного ArtemGr:

  • -u- говорит, что основной архив не должен быть изменен
  • -up0q3r2x2y2z0w2!{differential.7z} указывает целевой дифференциальный архив и то, что нужно сделать для каждого файла для каждого условия / состояния: добавить файлы, которые являются новыми или измененными в файловой системе, удалить файлы, которые есть только в 7zip-архиве, игнорировать остальные.

На всякий случай, если вам интересно узнать о специфике этого загадочного p0q3r2x2y2z0w2

<state> | State condition
p | File exists in archive, but is not matched with wildcard.   Exists, but is   not matched 
q | File exists in archive, but doesn't exist on disk.
r | File doesn't exist in archive, but exists on disk.
x | File in archive is newer than the file on disk.
y | File in archive is older than the file on disk.
z | File in archive is same as the file on disk
w | Can not be detected what file is newer (times are the same, sizes are different)

<action> | Description 
0 | Ignore file (don't create item in new archive for this file) 
1 | Copy file (copy from old archive to new) 
2 | Compress (compress file from disk to new archive) 
3 | Create Anti-item (item that will delete file or directory during extracting). This feature is supported only in 7z format. 
2

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

# создать разницу шаг в прошлое
7z u {base archive.7z} {папка в архив} -mx = 9 -u- -up1q1r3x1y1z0w1! {decrement.7z}

# обновить архив до последних файлов
7z u {base archive.7z} {папка в архив} -mx = 9 -up0q0x2

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

0

В пакетном файле с enabledelayedexpansion вам нужно заключить в кавычки "!"с двумя ^^ как это

7z u {existing archive.7z} -u- -up0q3r2x2y2z0w2^^!{new differential.7z} {folder or files to archive}

Мне понадобилось время, чтобы увидеть это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .