haegar75
Goto Top

Geänderte Dateien per dir in Datei und fc ermitteln

Hallo Leute,
ich muss euch mal wieder belästigen..
Ich möchte Dateien die sich seit der letzten Datensicherung geändert haben packen und wegkopieren.
Da sich die bereits gepackten und wegkopierten schlecht mit den unkomprimierten vergleichen lassen, hatte ich folgenden Ansatz gewählt..
Mit dir die Dateinamen in Datei umleiten und dann mit fc die am Tag vorher erstellte datei vergleichen und aus den Unterschieden die zu kopierenden Dateien ermitteln.
Versuch:

dir *.dbx | SORT /r | FIND /v "Volumeseriennummer:" | FIND /v "Verzeichnis" | FIND /v "Datei(en)" | FIND /v "Laufwerk" > copy.txt
fc copyalt.txt copy.txt

Leider werden mir wenn sich eine Datei ändert aber auch die vorherige und die nachfolgende angezeigt, obwohl die gleich sind... Ausserdem weiß ich noch net wie ich aus dem Wust an Datum und Größe den Dateinamen extrahieren kann..

Content-ID: 96820

Url: https://administrator.de/contentid/96820

Ausgedruckt am: 25.11.2024 um 00:11 Uhr

Biber
Biber 12.09.2008 um 18:46:08 Uhr
Goto Top
Hmmja, Haegar75,

bei aller Liebe zu Batch-Lösungen... lass uns bitte noch ein paar Zeilen bei der Backup-Strategie verweilen...

So, wie sich das End-Wunsch-Ergebnis darstellen müsste, erzeugst Du doch täglich eine Delta-Sicherung (alle heute geänderten Dateien) und dieses Delta speicherst Du als eine ZIP oder RAR-Datei weg.

Wäre es da nicht simpler und wartbarer, jeden gatesverdammten Tag per Taskplaner einen Batchjob anzustoßen, der alle Dateien mit heutigen Datum im ...\src-Verzeichnis zusammensammelt und in eine (heut z.B.) 2008-09-12.zip schreibt?
Oder welches bisher geplante Feature würde dann fehlen?

Grüße
Biber
Haegar75
Haegar75 12.09.2008 um 18:55:17 Uhr
Goto Top
Nunja, das mache ich ja im Prinzip auch mit den "kleinen" Dateien (inkrementelles Backup mit Xcopy)
Den oben beschriebenen Eiertanz wollte ich mir nur mit den mehreren hundert MB großen Brocken abhalten, da der Platz auf dem Sicherungslaufwerk begrenzt ist..
Das sei zu meiner Verteidigung zu sagen.. face-wink
Biber
Biber 12.09.2008 um 19:40:58 Uhr
Goto Top
...in diesem Fall würde ich dann eher den Weg gehen, mit ZWEI komplettsicherungs-ZIPs zu arbeiten.

In der ersten Komplett-ZIP-Datei (die für Mo, Mi, Fr) lässt Du dein ZIP-Programm jeweils alle src-Files aktualisieren, die verglichen mit dem letzten Stand im Archiv neuer sind; in der anderen Zip-Datei (die für Mo und Mi) machst Du dasselbe Spielchen.
Somit hast Du immer die Daten von heute( im Src-Verzeichnis), den Vortags-Stand und den von vorgestern( oder älter).

Oder du nimmst nur ein Komplett-Archiv als zip und machst die Zwei-Dalta-Mimik nur mit Dateien, die sich im letzten Monat geändert haben.

Vorteil der ersten Lösung wäre: du kannst (solltest Du mal in Deinem Src-Ordner richtig was verkantet haben) immer noch per Knopfdruck auf einen in sich konsistenten Stand/zusammenpassende Dateien zurück.

Aus einem SRC-Ordner eine einzelne Datei aus einer Delta-Sicherung zurückzukopieren... hmmm..... kann klappen, muss aber nicht.

Aber ich wäre auch bereit, meine Einwände zurückzustellen, wenn Du auf Deinem Konzept bestehst... face-wink

Grüße
biber
Haegar75
Haegar75 12.09.2008 um 20:06:39 Uhr
Goto Top
Naja, was heißt drauf bestehen.. Meine Einsichtigkeit wird eigentlich nur noch von meiner Bescheidenheit übertroffen! face-wink
Deine Einwände hab ich noch nicht ganz verstanden.. Was ich vorhabe ist ja eigentlich keine wirkliche Delta-Sicherung.. Die dbxe die ich sichern will (hatte mich eben vertan mit src..) kann ich ja nur als Ganzes anpacken. Ich möchte halt nur die Brocken austauschen die sich geändert haben.
bastla
bastla 12.09.2008 um 22:50:10 Uhr
Goto Top
Hallo Haegar75 und Biber!

Unabhängig von den weiteren Überlegungen als Antwort auf die eigentliche Fragestellung: Als Ersatz der "fc"-Zeile sollte
Z:\>for /f "delims=" %%i in (D:\copy.txt) do findstr /x /c:"%%i" D:\copyalt.txt>nul || for /f "tokens=3*" %%a in ("%%i") do echo %%b  
die unterschiedlichen Dateien ausfiltern.

Grüße
bastla
Haegar75
Haegar75 13.09.2008 um 21:17:41 Uhr
Goto Top
Funktioniert akkurat! Danke!!! Was macht das "token=3*" eigentlich?
bastla
bastla 13.09.2008 um 22:46:11 Uhr
Goto Top
Hallo Haegar75!

Was macht das "token=3*" eigentlich?
Damit wird festgelegt, welche Teile der Zeile interessieren bzw den Schleifenvariablen (hier ab %%a) zugeordnet werden - so wird zB die Zeile
12.09.2008  22:40             2.542 copyalt.txt
anhand der defaultmäßigen (daher auch keine Angabe von "delims=") Trennzeichen "Tab" und "Leerzeichen" in die Teile
1:    12.09.2008
2:    22:40
3:    2.542
Rest: copyalt.txt
zerlegt.

Eigentlich benötigt wird zwar der Teil 4, aber, um für den Fall, dass der Dateinamen ein oder mehrere Leerzeichen enthalten könnte (wodurch auch noch die Teile 5, 6, etc entstünden), vorzusorgen, wird der Rest der Zeile durch die Angabe von "*" zu einem einzigen "token" (%%b) zusammengefasst.

Grüße
bastla