Инкрементное резервное копирование с 7zip
Я гуглил и искал, но не могу найти команду, которую утилита командной строки 7zip использует для создания инкрементных резервных копий. Так может кто-нибудь, пожалуйста, поделитесь командой?
Спасибо
Кстати, я нашел эту ссылку: http://wmug.co.uk/wmug/b/sean/archive/2009/03/20/powershell-amp-7zip-incremental-backup-solution.aspx. Но, похоже, это для дифференциальных резервных копий, даже несмотря на то, что это говорит о добавочной.
4 ответа
Это должно быть просто, используйте это для создания и постепенного обновления архива:
7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}
Эта страница предлагает ссылку для параметров обновления.
Они переводятся следующим образом:p0
- Если "Файл существует в архиве, но не соответствует символу подстановки", удалите файл из архива.q3
- Если "Файл существует в архиве, но не существует на диске", удалите файл из архива и удалите его из файловой системы после извлечения.r2
- Если "Файл не существует в архиве, но существует на диске", упакуйте файл в архив.x2
- Если "Файл в архиве новее, чем файл на диске", то упакуйте старый файл в архив.y2
- Если "Файл в архиве старше, чем файл на диске", поместите новый файл в архив.z1
- Если "Файл в архиве совпадает с файлом на диске", повторно используйте упакованную версию файла.w2
- Если размер файла отличается, упакуйте измененный файл в архив.
Если бы вы делали инкрементное резервное копирование , вам нужно было бы предоставить 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.
Вы можете легко сделать инкрементное резервное копирование, изменив направление во времени. Т.е. вы всегда сохраняете последнюю резервную копию как полную копию и сохраняете разностные файлы в прошлом.
# создать разницу шаг в прошлое
7z u {base archive.7z} {папка в архив} -mx=9 -u- -up1q1r3x1y1z0w1!{Decment.7z}
# обновить архив до последних файлов
7z u {base archive.7z} {папка в архив} -mx=9 -up0q0x2
Базовый архив всегда содержит самую последнюю версию, и, шаг за шагом применяя "декременты", вы можете воссоздать более старые версии. С помощью небольшого количества сценариев вы можете применить правильную нумерацию к файлам декремента.
В пакетном файле с enabledelayedexpansion вам нужно заключить в кавычки "!" с двумя ^^ как это
7z u {existing archive.7z} -u- -up0q3r2x2y2z0w2^^!{new differential.7z} {folder or files to archive}
Мне понадобилось время, чтобы увидеть это.