PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : diff command kombinieren?



223
21.02.05, 13:31
ich nutze den diff command um in zwei ordnern alle unterschiede herauszufinden:

# diff -c path/ordner1 path/ordner2

problem ist jetzt aber, wenn ich eine textdatei in ordner 2 habe, die ich in ordner1 nicht habe, so wird mir die ganze textdatei ausgegeben, da jede linie nicht vorhanden ist. wie kann ich dass beheben?
ich möchte also eine meldung bei allen neuen dateien, und eine genaue 'linien-überwachung' bei existierenden dateien.

thx

mfg 223

223
21.02.05, 16:10
...oder ist diff der falsche command dazu?

Clerian
21.02.05, 16:53
probiers mal mit

md5sum path/ordner1/* > datei1.txt
md5sum path/ordner2/* > datei2.txt
und dann ein diff datei1.txt datei2.txt

so kriegst du sicher alle änderungen in den Dateien mit...
musst das ganze nur noch in einen script einpacken und geht schon...

mfg Clerian

ps. bei den existierenden dateien musst du dann noch die einzelnen Dateien mit einer schleife für diff einlesen ... für die Linienüberwachung

223
23.02.05, 07:27
danke!

gibt es eine möglichkeit nur die veränderten (hinzugefügten, gelöschten, veränderten) zeilen einer datei anzuzeigen? also bei welchen ein +, - oder ! davor steht!??

ich vergleiche lange java source files, und das ist mühsam wenn mehrere lange files ganz ausgegeben werden

sirmoloch
23.02.05, 08:13
Meinst du diff -u?

223
24.02.05, 15:46
irgendwie krieg ichs net hin.
-u ist auch nicht die lösung die ich möchte.

hier mal ein Bsp. was ich mir als endergebnis vorstelle:



# < path/datei1.java 2005-02-24 16:30:00.000000000 +0100
# > path/datei2.java 2005-02-24 16:30:00.000000000 +0100
#
# 5 (zeilennr.)
# > + import java.lang.*
#
# 14
# > + String bla = new String ("blabla");
#
# 16
# < ! String test = new String ("test");
# > ! String test = new String ("testskjdflajs");


also wirklich nur unterschiede.
ist das überhaupt möglich?

thx
cheers 223

tictactux
24.02.05, 16:19
meinst Du etwas wie:
diff --suppress-common-lines liste1 liste2 ?

Das liefert "wirklich nur Unterschiede" :)

Gruß,
Wolfgang

ähm: gnu-diff vorausgesetzt...

EDIT: alternativ: diff -u .... | sed -ne '/^[+-]/p'

Clerian
24.02.05, 16:27
ich fürchte wenn dir diff -u nicht reicht, wirst du wohl debst hand anlegen müssen...

also zeile für zeile einlesen und vergleichen..

Clerian

ps. hmm.. --suppress-common-lines kannte ich gar nicht ...

223
25.02.05, 07:20
noobfrage:
kann man --suppress-common-lines mit -U 1 kombinieren?

tictactux
25.02.05, 13:36
> kann man --suppress-common-lines mit -U 1 kombinieren?

das bringt zwar keine Fehlermeldung (wie die Kombination anderer unverträglicher
Optionen, i.e. -C/-U), aber auch nicht das IMO erwartete Ergebnis.
Falls die '<>' am Zeilenanfang stören, um das Ergebnis weiter zu verarbeiten,
würde ich sie wie erwähnt mit sed wegfiltern.

Gruß,
wolfgang

223
28.02.05, 07:40
ich habe jetzt die lösung!

diff -wC 1 datei1 datei2

wie kann ich das ganze noch in eine datei schreiben?

mfg 223

ps mit ">" funktionierts nicht, da ich mehrere diff befehle habe und die datei dan immer wieder überschrieben wird.

theraven
28.02.05, 08:48
versuch mal ">>" damit sollte das ganze immer angehängt werden wenn die datei schon existiert.