Suche Diff Tool für Dateisysteme

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Benutzeravatar
weedy
Beiträge: 585
Registriert: 02.11.2002 21:47:49
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Suche Diff Tool für Dateisysteme

Beitrag von weedy » 12.09.2020 17:43:26

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ß

swick
Beiträge: 7
Registriert: 07.09.2020 16:09:29

Re: Suche Diff Tool für Dateisysteme

Beitrag von swick » 12.09.2020 22:47:48

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...

Benutzeravatar
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

Beitrag von weedy » 12.09.2020 23:24:09

swick hat geschrieben: ↑ zum Beitrag ↑
12.09.2020 22:47:48
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...
b sei ein verändertes Verzeichnis auf der Grundlage des Verzeichnisses a.

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ß

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Suche Diff Tool für Dateisysteme

Beitrag von JTH » 13.09.2020 00:10:09

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.:

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/
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:

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.

Benutzeravatar
whisper
Beiträge: 3190
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Suche Diff Tool für Dateisysteme

Beitrag von whisper » 13.09.2020 08:35:44

Oder selber bauen und getfacl / setfacl benutzen?

Benutzeravatar
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

Beitrag von weedy » 13.09.2020 15:09:06

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ß

Antworten