Menge an Änderungen ermitteln

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
lisdede8
Beiträge: 5
Registriert: 21.09.2012 11:55:37

Menge an Änderungen ermitteln

Beitrag von lisdede8 » 21.09.2012 12:05:26

Hallo.

Ich suche etwas mit dem ich schauen kann um wie viele Bytes sich einer Datei (im Vergleich zu einer alten Version) verändert hat.

Beispiele:

alte datei -> neue datei:
1. die ersten 5 bytes wurden geändert: Rückgabe 5 Bytes wurden verändert
2. die Datei wurde 5 zusätzliches bytes erweiter: Rückgabe 5 Bytes wurden verändert.
3. die Datei wurde um 3 Bytes gekürtzt: Rückgabe 3 Bytes wurden verändert
4. (etwas komexplexer) Mitten in der Datein sind 5 Bytes dazu gekommen: Rückgabe. 5 Bytes wurden verändern.. Da die Datei aber 5 bytes dabei grösser wird,müsste man eigentlich sogar 10 sagen. Aber die Änderung betrifft hier nur 5.

Gibt es da zufällig schon etwas in der Shell oder Programmdatenbanken, bevor ich selber so einen Byte für Byte Vergleich mit Sync schreibe?

PS: Wenn bei Prozess des Vergleich auch noch SHA1 und MD5 mitberechnet werde, wäre das natürlich noch besser. Aber nur MD5 reicht nicht. Ich möchte bei den Dateien wissen wie viel Bytes wirklich geändert wurden.

uname
Beiträge: 12469
Registriert: 03.06.2008 09:33:02

Re: Menge an Änderungen ermitteln

Beitrag von uname » 21.09.2012 12:36:50

Zum Anzeigen der Unterschiede (bei ASCII-Dateien) empfehle ich erst mal "vimdiff".

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Menge an Änderungen ermitteln

Beitrag von Cae » 21.09.2012 13:57:35

Code: Alles auswählen

$ cat foo
jkjkjk
kkkkkk
jjjjjj
foo
bar
$ diff -u0 foo bar
--- foo 2012-09-21 13:52:53.000000000 +0200
+++ bar 2012-09-21 13:53:10.000000000 +0200
@@ -2,2 +2,2 @@
-kkkkkk
-jjjjjj
+kkjjkk
+jjkkjj
@@ -5 +5 @@
-bar
+baz
$ cmp -b foo bar
foo bar differ: byte 10, line 2 is 153 k 152 j
$ 
Wobei cmp beim "falschen" ersten Zeichen schreit und abbricht. Das kann man aber mit -i und einer Schleife immer weiter schieben, bis man alle Veränderungen hat. Das kommt aber leicht aus dem Takt, wenn in foo zum Beispiel ein Zeichen weniger ist als in bar. diff oder wdiff kommen dann näher dran, aber die zeigen keine veränderten Bytes an, sondern eben Zeilen oder Worte (oder ich habe das übersehen).

Ah, Halt:

Code: Alles auswählen

$ cmp -bl foo bar | wc -l
5
-l (minus ell) macht das, bricht also nicht ab. Und die fünf Bytes habe ich auch *ersetzt*. Nun habe ich s/foo/fo/ gemacht:

Code: Alles auswählen

$ diff -u0 foo bar
--- foo 2012-09-21 13:52:53.000000000 +0200
+++ bar 2012-09-21 14:00:18.000000000 +0200
@@ -2,4 +2,4 @@
-kkkkkk
-jjjjjj
-foo
-bar
+kkjjkk
+jjkkjj
+fo
+baz
$ cmp -bl foo bar
10 153 k    152 j
11 153 k    152 j
17 152 j    153 k
18 152 j    153 k
24 157 o     12 ^J
25  12 ^J   142 b
26 142 b    141 a
27 141 a    172 z
28 162 r     12 ^J
cmp: EOF auf bar.
$ cmp -bl foo bar | wc -l
cmp: EOF auf bar.
9
$ 
Danach sind angeblich alle Zeichen geändert (was ja auch stimmt, wenn man mit statischem Offset zählt).

Willkommen im Forum!

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Menge an Änderungen ermitteln

Beitrag von Cae » 29.09.2012 21:17:30

Gerade gefunden: Debiandocdiff.

Meldet sich der TE nochmal?

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Antworten