Das Utility DirComp dient zum Vergleich zweier Verzeichnisse (und auf Wunsch auch derer Unterverzeichnisse), wobei der Vergleich sowohl auf Existenz als auch auf Änderungsdatum (nachfolgend "Timestamp" genannt) oder Inhalt erfolgen kann.
Als Returnwert wird die Anzahl der unterschiedlichen Dateien geliefert 1 (sofern nicht anders angegeben).
Aufruf:
DirComp [<Option(en)> ...] Ausgangsverzeichnis Vergleichsverzeichnis
DirComp --daemon[[=]<port>]
DirComp --server[[=]<port>]
mit folgender Bedeutung der Parameter:
Optionen ................. Optionen zum Steuern des Programms (Case-sensitiv!)
-s, --recursive ....... Rekursiver Vergleich von Unterverzeichnissen
-E, --req-equal ....... Rekursiver Vergleich lediglich von gleichnamigen Unterverzeichnissen
-n, --no-changed ...... Unterdrückt die Anzeige jüngerer und älterer Dateien
-N, --existing ........ Unterdrückt die Anzeige neuer und gelöschter Dateien
-e, --equal ........... Zeigt zusätzlich auch gleiche Dateien
-d, --show-dirs ....... Verzeichnisse mit unterschiedlichen Timestamps werden angezeigt
-v, --verbose ......... Die Anzeige der Dateien erfolgt mit Timestamp(s)
-H, --hidden .......... Vergleiche auch versteckte Dateien
-c, --compare ......... Der Inhalt der (lesbaren) Dateien wird verglichen (bei unterschiedlichen Timestamps)
-C, --force-compare ... Der Inhalt der (lesbaren) Dateien wird verglichen (unabhängig vom Timestamp)
-i, --include ......... <Filespec>: Beschränkt den Vergleich auf die angegebenen Dateien
-x, --exclude ......... <Filespec>: Exkludiert die angegebenen Dateien vom Vergleich
-I, --include-dirs .... <Dirspec>: Beschränkt den Vergleich auf die angegebenen Verzeichnisse
-X, --exclude-dirs .... <Dirpec>: Exkludiert die angegebenen Verzeichnisse vom Vergleich
-t, --begin-time ...... <Datum>: Untergrenze des Datums (ab dem verglichen wird)
-T, --end-time ........ <Datum>: Obergrenze des Datums (bis zu dem verglichen wird)
-V, --version ......... Zeigt zusätzliche Informationen zum Programm
-q, --quiet ........... Quiet-Modus: Keine überflüssigen Ausgabe; nur Compare-Info
-Q, --silent .......... More Quiet-Modus: Keine Ausgabe (für Batchverarbeitung)
-a, --action .......... [<Action>]: Auszuführende Aktion bei unterschiedlichen Dateien
-A .................... <Change-ID>[<Action>]: Auszuführende Aktion bei spezifizierten Dateien
-S, --server .......... [<port>] Starte Programm als Server (im Fordergrund) und warte auf Daten an port
-D, --daemon .......... [<port>] Starte Programm als Server (als Daemon) und warte auf Daten an port
-r, --ret-changed ..... Liefert die Anzahl der geänderten Files (Default: Alle unterschiedlichen)
-R, --ret-new ......... Liefert die Anzahl der neuen oder geänderten Dateien
-h, -?, --help ........ Zeigt einen Hilfetext zum Programm; keine weitere Aktion
Ausgangsverzeichnis ..... Basis für den Vergleich (altes Verzeichnis)
Vergleichsverzeichnis ... Verzeichnis zum Vergleichen (neues Verzeichnis)
Der Aufruf von
DirComp -d Test1 Test2
würde beispielsweise
Älter : DirComp.cpp
Neu : DynArray.h
Jünger : Test
Neu : Another
Gelöscht: Other
Gelöscht: DirComp.mak
liefern. Mit der Option s würde die Unterverzeichnisse Test, Other und Another ebenfalls untersucht werden. Ähnlich ist die Option E, die ebenfalls Unterverzeichnisse vergleicht, dies aber nur, wenn sie in beiden Vergleichsverzeichnissen vorkommen.
Die Option n würde die Anzeige der Jünger/Älter-Zeilen unterdrücken; ähnlich wie die Option N, bei der die Neu/Gelöscht-Zeilen nicht angezeigt würden.
Durch die Option e werden gleiche Dateien (zusätzlich) ausgegeben:
Gleich : DirComp.h
Wäre die Option d nicht angegeben, würde die Zeile "Jünger: Test" nicht erscheinen (dies ist das Default-verhalten, da Test ein Verzeichnis ist und deren Zeitdifferenzen normalerweise nicht interessieren).
Die Option v liefert das Ergebnis mit Timestamp der unterschiedlichen Datei(en). Existiert das Vergleichsfile in beiden Verzeichnissen werden die Timestamps beider Dateien angezeigt.
Die Option c untersucht bei Dateien mit unterschiedlichem Timestamp (und gleicher Größe) deren Inhalt.
Die Option C vergleicht bei Dateien mit unterschiedlicher Größe (unabhängig vom Timestamp deren Inhalt. Unterschiedliche Dateien (mit gleichen Timestamps) liefern folgenden Output:
Untersch.: DirComp.cpp
Versteckte Dateien werden durch die Option H in den Vergleich aufgenommen. Auf *NIX-Systemen sind das Dateien, die mit einem Punkt (.) beginnen, andere Betriebssystem (wie OS/2 oder DOS (mitsamt der aufgesetzen graphischen Fehlersammlung)) haben dafür ein eigenes Dateiattribut.
Die Option i beschränkt den Vergleich auf Dateien (Verzeichnise unterliegen dieser Beschränkung nicht!), die der angegebenen Namensspezifikation entsprechen. Es werden die Wildcards Stern (*) für eine beliebige Anzahl beliebiger Zeichen und Fragezeichen (?) für genau ein beliebiges Zeichen unterstützt. Zusätzlich kann innerhalb von eckigen Klammern ([) und (]) ein Bereich der gültigen (oder (bei führendem Caret (^)) auch ungültigen) Zeichen spezifiziert werden, wobei diese entweder einzeln aufgezählt oder durch Minus (-) deren Grenzen festgelegt werden.
Analog dazu gibt es die Option x, die Dateien vom Vergleich ausschließt.
Die obigen beiden Optionen können beliebig oft wiederholt werden; die jeweilige Dateimenge wird immer erweitert. Alternativ können auch mehrere Namensbereiche durch das Pfad-Trennzeichen des Betriebsystems (den Doppelpunkt (:) in *NIX, das Semikolon (;) in OS/2, DOS und Windoze) von einander getrennt angegeben werden.
e.g. -i*.cpp -i *.h -x*[^1-9].cpp:[A-EXYZ]*.cpp für *NIX
e.g. -i*.cpp -i *.h -x*[^1-9].cpp;[A-EXYZ]*.cpp für OS/2, DOS
Diese beiden Optionen werden von links nach rechts ausgewertet; man sollte also die allgemeineren Optionen zuerst angeben; wird keine Option zum inkludieren (i) angegeben, wird ein führendes -i* implizit angenommen.
Ähnlich funktionieren die Optionen I und X, nur das diese komplette Unterverzeichnisse vom Vergleich ausschließen. Bezüglich Wiederholbarkeit und Wildcards gelten die selben Regeln wie bei den Dateien.
Die Wildcards bei den Verzeichnissen werden in mehreren Ebenen unterstützt; d.h -I*/?O inkludiert alle Verzeichnisse in zweiter Ebene, die mit einem O an zweiter Stelle aufhören; -XLinux/* vergleicht alle Unterverzeichnisse von Linux nicht.
Wird zumindest eine der letzten beiden Optionen angegeben, werden automatisch Unterverzeichnisse mitverglichen (auch wenn die Option s nicht angegeben wurde).
Die Optionen t und T schränken den Vergleich auf Dateien ein, die im angegebenen Datumsbereich (inklusive der Grenzen selbst) liegen; wobei mit t die untere und mit T die obere Grenze spezifiziert wird.
Diese Optionen erwarten als Parameter ein Datum im Format T.M.JJJJ-h:m:s (JJJJ größer als 1979!), wobei die einzelnen Werte durch beliebige Trennzeichen getrennt sein können und KEINE führenden Nullen enthalten dürfen!
ACHTUNG: Werden zwei gleichnamige Dateien gefunden, von denen lediglich eine innerhalb des Bereichs liegt, wird diese als Neu oder Gelöscht (je nachdem) gemeldet (d.h. Dateien außerhalb dieser Grenzen gibt es (für das Tool) nicht)!
Durch die Option V wird einerseits zusätzliche Information zum Programm angezeigt (Datum der Übersetzung; Information über zuständige Personen) und andererseits bei der Hilfe eine genauere Beschreibung der Optionen geliefert.
Die Option q unterdrückt die Ausgabe von reinen Informationszeilen (außer natürlich bei der Hilfe) und beschränkt diese auf die Anzeige der unterschiedlichen Zeilen (gemäß der anderen Optionen). Dadurch kann der Output einfach(er) automatisch (in Scripten) nachbearbeitet werden.
Für die Batchverarbeitung gibt es zustätzlich noch die Optionen r, R und Q. Die letzte unterdrückt jegliche Ausgabe des Programms; die erste liefert die Anzahl der geänderten, die zweite die Anzahl der neuen oder gelöschten Dateien (Defaultmäßig werden alle unterschiedlichen Files geliefert).
Mit den Optionen a und A können Aktionen angegeben werden, die auf den unterschiedlichen Dateien durchgeführt werden sollen, wobei im Parameter für die Aktionen folgende Platzhalter unterstützt werden:
| Platzhalter | Steht für |
|---|---|
{OP} | Pfad der Originaldatei |
{OF} | Pfad und Name der Originaldatei |
{CP} | Pfad der Vergleichsdatei |
{CF} | Pfad und Name der Vergleichsdatei |
Bei der Option A muß auch ein Änderungskennzeichen angegeben werden, das spezifiziert, für welche Dateien diese Aktion ausgeführt werden soll. Mögliche Werte dafür sind (Diese Änderungstypen können durch zusammenodern kombiniert werden):
| Change-ID | Steht für |
|---|---|
1 | Jüngere Dateien |
2 | Ältere Dateien |
4 | Unterschiedliche Dateien (gleicher Timestamp, aber unterschiedlicher Inhalt gemäß Option C) |
8 | Gleiche Dateien |
16 | Gelöschte Dateien |
32 | Neue Dateien |
Wird beim Parameter Minus (-) (bei A auch keine) als Aktion angegeben, wird kein Fehler geliefert, sondern keine Aktion durchgeführt. Dadurch ist es möglich, lediglich neue oder geänderte Dateien zu bearbeiten (z. B.: Aktualisieren der Originaldaten wäre mit folgenden (äquivalenten) Befehlen möglich):
DirComp "-acp {CF} {OP}" -A26 . ..
DirComp "-A37cp {CF} {OP} +1" . ..
Verzeichnisse können auch über ein Netzwerk verglichen werden. Dazu muss DirComp auf dem Vergleichsrechner als Server (Option S) oder Daemon (Option D) gestartet sein. Das jeweilge Verzeichnis wird dann durch <Server>:<Verzeichnis>[:<Port>] angegeben. Ein Beispiel wäre:
DirComp /usr/local/src/DirComp prod:/usr/local/DirComp:4711
Auf dem Rechner prod muß das Utility folgendermaßen gestartet sein:
DirComp -D 4711
Um etwaige Fehlermeldungen angezeigt (und nicht nur in das Logfile) zu bekommen, müßte die Option D durch S ersetzt werden. Der Defaultport ist 31336.
Vorsicht beim Verwenden dieses Features, da es etwaigen Angreifern Informationen über die Verzeichnisstruktur und damit die installierten Programme bieten könnte! Das ist auch der Grund, warum man diese Features auch beim Übersetzen/Konfigurieren speziell aktivieren muß.