Schlagwort-Archive: diff

Tar-Archive vergleichen

Ich sichere bestimmte Verzeichnisse von Rechnern täglich in Tar-Archiven (siehe auch „Verzeichnisse auf einen anderen Rechner übertragen“). Nun kommt es vor, dass diese Archive plötzlich oder auch mit der Zeit größer werden. Dann will man natürlich wissen, wieso. Um im ersten Schritt zu vermeiden, dass ich die Archive auspacken und dann vergleichen muss, lese ich den Inhalt zwei Tar-Dateien aus, bereite sie mittels sed auf und vergleiche sie mit diff:

tar tvf 20140822.tgz |  sed 's/^\([a-zA-Z\-]\{1,\}\) \([^[:blank:]]\{1,\}\) \{1,\}\([0-9]\{1,\}\) .* \(.*\)$/\4 \3/' > 20140822.content 
tar tvf 20140901.tgz |  sed 's/^\([a-zA-Z\-]\{1,\}\) \([^[:blank:]]\{1,\}\) \{1,\}\([0-9]\{1,\}\) .* \(.*\)$/\4 \3/' > 20140901.content
diff -y -W 200 --suppress-common-lines 20140822.content 20140901.content > 20140822vs20140901

Sofern sich nicht all zu viele Dateien geändert haben oder dazu gekommen sind, kann das Ergebnis schon erste Hinweise geben. Ansonsten muss man mit den üblichen Werkzeugen (z.B. grep) weiter filtern und analysieren.

diff aus 2x STDOUT

Man kann bei diff normalerweise nur einen der beiden Datei-Parameter durch ein „-“ ersetzen, um diese Daten vom Standard-Input zu lesen. Was aber, wenn man die Ausgaben von zwei Programmen vergleichen und man diese nicht in Dateien zwischenspeichern will?

Bei commandlinefu.com fand ich die Lösung:

diff <( cmd1 ) <( cmd2 )

Man kann also prima die Ausgabe von zwei Greps auf ps vergleichen, um die User zu finden, bei denen ein Programm nicht gestartet ist:

diff <( ps -ef | grep  'bin/anel' | sort | cut -c 1-8 ) \n  <( ps -ef | grep 'script/start_aws' | sort | cut -c 1-8 )