7z ist nicht nur ein Packer, es eignet sich hervorragend für schnelle incrementelle Sicherungen. Dazu muss man nicht immer die Shell aufmachen – gerade im Kommandozeilen Modus ist einiges möglch. Dadurch lassen sich Batches erstellen, die im täglichen Betrieb hilfreich sein können; vor allem, wenn man entwickelt und schnell verschiedene Versionen eines Ordners aufbehalten möchte. Besonders vorteilhaft ist hierbei, daß 7z bei Differenzsicherungen auch sogenannte Antifiles anlegt, was Platzhalter für Dateilöschungen sind. Damit werden bei der Extrahierung der Differenz über dem Master Backup auch inzwischen gelöschte Dateien entfernt.
Schauen wir uns dazu erstmal grundlegende Beispiele an:
Grundlegende Befehlsoptionen und Beispiele
Vollbackup
7z a c:\archive.7z c:\ZuSichern
Differenz:
7z u c:\archive.7z c:\ZuSichern -ms=off -mx=9 -t7z -u- -up0q3r2x2y2z0w2!c:\diff1.7z
p - File exists in archive, but is not matched with wildcard. 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. w - Can not be detected what file is newer (times are the same, sizes are different)
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)
Rücksicherung:
7z.exe x c:\archive.7z -oc:\recovery_path\ 7z.exe x c:\archive.7z -aoa -y -oc:\recovery_path\
-aoa Overwrite All existing files without prompt. -y (assume Yes on all queries) switch
Rons Backup Bat:
Aus den o.g. Optionen kann man sich nun eine Batch bauen, die für beliebige Ordner in einem vorgegebenen Pfad (z.b. in einem Netzwerkordner, oder auf USB Backups anlegt.
Ich habe die Batch so gestaltet, daß sie den Pfad der zu sichernden Dateien im Backup Ordner nachbaut (Auch für UNC-Shares) und im passenden Ordner die erste Vollsicherung mit Namen „basis.7z“ erstellt. Wird die Batch noch einmal am gleichen Ordner ausgeführt, folgt die erste Differenzsicherung, die als Namen Datum und Uhrzeit erhält.
Am Besten legt man diese Bat einfach in das Sendto Verzeichnis. So kann man einfach per „Senden an..“ schnelle Backups machen. In den ersten Zeilen stehen die Pfade für 7z und den Bachop Pfad, die müssen natürlich angepasst werden.
Die Batch nimmt als ersten Parameter den zu sichernden Ordner. Alle weiteren folgenden Parameter sind Excludes.
@echo off REM === HIER ANPASSEN : ============================================================ REM Pfad zu 7zip set Z=C:\Program Files\7-Zip\7z.exe REM Standard Backup Ordner set BF=d:\Backup REM ============ VERARBEITUNG ====================================================== set SF=%1% REM Hochkomma weg set SF=%SF:"=% REM Filename for /f "tokens=* delims= " %%f in ("%SF%") do set SN=%%~NXf REM Alternativ Pfad bauen set SP=%SF:\\=NET\% set SP=%SP::=% set SP=%SP:"=% REM EXCLUDE LIST rem -xr!*.o set xcl= :loop shift if "%1"=="" goto :endloop set xcl=%xcl% -xr!%1% goto :loop :endloop cls echo EXCLUDES: %xcl% Echo BACKUP : %d%%t% von %SF% echo PFAD : %BF%\%SP%\%d%%t%.7z echo EXCLUDES: %xcl% echo. echo. REM 7Z if exist "%BF%\%SP%\basis.7z" goto :increment Rem Backup "%Z%" a "%BF%\%SP%\basis.7z" "%SF%" %xcl% goto :end :increment REM DATETIME for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set d=%%k-%%j-%%i for /f "tokens=1,2 delims=: " %%i in ('time /t') do set t=%%i%%j set inc=%BF%\%SP%\%d%%t%.7z REM Backup Incrementell "%Z%" u "%BF%\%SP%\basis.7z" "%SF%" -ms=off -mx=9 -t7z -u- -up0q3r2x2y2z0w2!"%inc%" %xcl% :end explorer.exe "%BF%\%SP%"