Hi,
ich suche ein Diff Tool, welches mir die Differenzen von Textdateien, Binärdateien und Datei-Eigenschaften in 2 Verzeichnissen in eine Art Patchfile einträgt und aus diesem ein Verzeichnis in das andere übertragen kann.
Leider habe ich hier nur eine Handvoll Tools, die immer nur fast alles können:
- diff: arbeitet nur mit textdateien und kann keine patches für binärdateien erzeugen, erzeugt auch keine chmod diffs
- bsdiff : arbeitet nur mit einzelnen binärdateien und erzeugt keine chmod diffs
- git: kann genaugenommen so ein diff erzeugen, hat aber probleme mit dem ersetzen von softlinks und dateien, allerdings ist auch das '.git' verzeichnis als eine Art Patchfile unhandlich
- debpatch: kann fast schon, was ich will, wendet es aber nur auf deb Dateien an und nicht auf Dateisysteme
Ist irgendwo da draussen noch ein anderes cmdline Diff / Patch Tool, welches Text-, Binärdateien, Dateitypen und Filepermissions berücksichtigen kann?
Ich meine, im einfachsten Fall kombiniere ich mir selber eins aus tar + bsdiff, aber das ist zu strikt und zu unhandlich. Ich könnte dann das binäre patchfile, welches ein binäres diff zwerer tar Dateien ist immer nur anwenden, wenn das jeweilige Verzeichnis, welches ich patchen will 100% der Ausgangslage entspricht und ausserdem ist es schwierig das diff zu analysieren. Man sieht praktisch dann nicht, was genau gepatcht wird.
Gruß
Suche Diff Tool für Dateisysteme
Re: Suche Diff Tool für Dateisysteme
Vielleicht verstehe ich das grad falsch, aber wenn das Patchfile dafür da sein soll, das zweite Verzeichnis so zu patchen, dass es identisch zum ersten Verzeichnis ist,
müsste doch rsync reichen. Das zeigt zwar keinen optischen Diff von Textdateien an, aber am Schluss sind die Verzeichnisse identisch...
müsste doch rsync reichen. Das zeigt zwar keinen optischen Diff von Textdateien an, aber am Schluss sind die Verzeichnisse identisch...
- weedy
- Beiträge: 585
- Registriert: 02.11.2002 21:47:49
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Suche Diff Tool für Dateisysteme
b sei ein verändertes Verzeichnis auf der Grundlage des Verzeichnisses a.swick hat geschrieben:12.09.2020 22:47:48Vielleicht verstehe ich das grad falsch, aber wenn das Patchfile dafür da sein soll, das zweite Verzeichnis so zu patchen, dass es identisch zum ersten Verzeichnis ist,
müsste doch rsync reichen. Das zeigt zwar keinen optischen Diff von Textdateien an, aber am Schluss sind die Verzeichnisse identisch...
Wenn ich rsync nehme, um aus a b zu machen, indem ich es einfach rüberkopiere, dann brauche ich als vollständige diff Information beide Verzeichnisse in einem sagen wir Archiv.
Das ist zuviel und es zeigt nicht die Stellen, an denen Änderungen notwendig sind, um aus a b zu machen.
Hätte ich stattdessen ein diff tool für binär und text und filepermissions, dann würde diese diff Information viel kleiner ausfallen, als beide Verzeichnisse zusammen und diese diff Information würde zeigen, wie man möglichst effizient von a nach b kommt. Und sie böte die Möglichkeit, zerlegt zu werden in partielle diff operationen, wenn einem danach ist. (Nur nebenbei a und b repräsentieren Rootverzeichnisse ganzer Systeme. Was ich will ist, von Hand erzeugte Änderungen halbautomatisch so aufzubereiten, dass diese dann oder Teile davon später in einem Ritt auf anderen Systemen mit denselben Voraussetzungen eingespielt werden können.)
Gruß
Re: Suche Diff Tool für Dateisysteme
So ganz ist mir nicht klar, was dein Ziel ist, besonders mit dem Hintergrund, ein komplettes Dateisystem zu synchronisieren. Erstmal nur eine Liste veränderter Dateien, inklusive derer, deren Permissions sich geändert haben? Um nachträglich einen Patch o.ä. für ausgewählte zu erzeugen? Ein einfaches Werkzeug, das das kann, kenne ich nicht.
Unabhängig davon ein paar Anregungen:
rsync hat einen Batch-Modus. Mit dem kannst du tatsächlich eine Art Patch der Differenzen zwischen Quelle und Ziel anlegen. Und auch erst nachträglich anwenden, wenn gewollt auch auf mehrere Ziele – solange die Differenzen die selben sind, z.B.:
Der „Patch“ ist allerdings nicht menschenlesbar. rsync hat aber ja diverse Optionen, um zu filtern etc.
git diff zeigt – auch außerhalb eines Repositories – ja auch veränderte Permissions an und listet binäre Dateien erstmal nur als verändert. Geht für Textdateien vllt auch mit Optionen:
git diff kann auch einen mit git apply anwendbaren Patch ausgeben – auch für binäre Dateien:
Unabhängig davon ein paar Anregungen:
rsync hat einen Batch-Modus. Mit dem kannst du tatsächlich eine Art Patch der Differenzen zwischen Quelle und Ziel anlegen. Und auch erst nachträglich anwenden, wenn gewollt auch auf mehrere Ziele – solange die Differenzen die selben sind, z.B.:
Code: Alles auswählen
$ rsync -a --only-write-batch=my_batch src/ dest/ # dest/ ist noch unverändert
$ rsync -a --read-batch=my_batch dest/
git diff zeigt – auch außerhalb eines Repositories – ja auch veränderte Permissions an und listet binäre Dateien erstmal nur als verändert. Geht für Textdateien vllt auch mit Optionen:
Code: Alles auswählen
$ git diff src/ dest/
diff --git a/src/exe b/dest/exe
index 6322d90..e3e39d6 100755
Binary files a/src/exe and b/dest/exe differ
git diff kann auch einen mit git apply anwendbaren Patch ausgeben – auch für binäre Dateien:
Code: Alles auswählen
$ git diff --binary src/ dest/
diff --git a/src/exe b/dest/exe
index 6322d9060a99f0611b744feebdb38eed706d038f..e3e39d6ab37d0fefde88b0ffcee40df7d7a73ff6 100755
GIT binary patch
literal 43936
zcmeHw3w%`7)$f@+AS5so6*Rue5eG?>goKxgf@WYs&cH+?1W5(Vb3&qdH8Yb0<uN)5
z<aC&tR;sqOE!xLNtyXF+MXqRg7{FH}D&jl7&oQXcDj=wH|7)LpW=_V;SKEH~ckl0a
[snip]
Manchmal bekannt als Just (another) Terminal Hacker.
- whisper
- Beiträge: 3382
- Registriert: 23.09.2002 14:32:21
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
Re: Suche Diff Tool für Dateisysteme
Oder selber bauen und getfacl / setfacl benutzen?
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt.
- weedy
- Beiträge: 585
- Registriert: 02.11.2002 21:47:49
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Suche Diff Tool für Dateisysteme
Danke für die Antworten.
Die batch Variante per Rsync kannte nich noch nicht, sie ist leider noch zu restriktiv.
Ich will ja später auch text files Files patchen, die sich unter Umständen verändert haben.
Und bei binär files wäre es gut, wenn ich einfach nur eine Fehlermeldung bekäme, wenn die Ausgangsdatei eine andere ist, als erwartet.
Binärdateien wird es seltener zu patchen geben.
Ich werde das Tool wohl selber bauen müssen.
Gruß
Die batch Variante per Rsync kannte nich noch nicht, sie ist leider noch zu restriktiv.
Ich will ja später auch text files Files patchen, die sich unter Umständen verändert haben.
Und bei binär files wäre es gut, wenn ich einfach nur eine Fehlermeldung bekäme, wenn die Ausgangsdatei eine andere ist, als erwartet.
Binärdateien wird es seltener zu patchen geben.
Ich werde das Tool wohl selber bauen müssen.
Gruß