Verwalten von Dateinamenkollisionen beim Zusammenführen von Ordnern (Linux)

505
GattoVizzato

Ich brauche eine Art Synchronisierung von sw, um bidirektionales (rekursives) Zusammenführen von Ordnern durchzuführen.

Angenommen, ich habe 2 Ordner A und B.

Ordner A enthält Dateien: 1, 3, 5 and 7.
Ordner B enthält Dateien:1, 2, 3 and 6.

Nach dem Zusammenführen sollte das Ergebnis wie folgt aussehen:

Ordner A: 1, 1-b, 2, 3, 3-b, 5, 6, 7
Ordner B:1, 1-a, 2, 3, 3-a, 5, 6, 7


Zerlegung sie getrennt:

Beide Ordner A und B enthalten: 2, 5, 6, 7
(die ODER-Verknüpfung von nicht kollidierenden Dateinamen: eine bidirektionale Kopie (von demselben Rang, keine bestimmte Quelle oder ein bestimmtes Ziel) ohne Umbenennung;

Ordner A enthält außerdem: 1, 1-b, 3, 3-b(eigene Versionen und hinzugefügte).
Ordner B enthält außerdem: 1, 1-a, 3, 3-a(eigene Versionen und hinzugefügte).
(Der Bindestrich-a oder Bindestrich-b ist nur ein Platzhalter für die automatische Umbenennung, um Namenskollisionen zu umgehen, nicht wirklich wichtig. Jeder Suffix würde tun). Grundsätzlich enthält jeder Ordner alle Versionen aller Dateien (ohne dass ältere Dateien überschrieben wurden), unabhängig von ihrem Namen.

Wie könnte ich dieses Ergebnis erzielen? Ich habe mir 'meld' angesehen, funktionierte aber nicht wie erwartet (es wurde vorgeschlagen, vorhandene Dateien zu überschreiben, kann nicht umbenannt werden), und 'rsync' erscheint an sich asymmetrisch (wodurch der Quelle ein höherer Rang als dem Ziel zugewiesen wird). Ich brauche echte parithetische Verschmelzung ...

Vielen Dank im Voraus für jede Hilfe. Übrigens ... ein dedizierter vorhandener SW wäre mehr zu begrüßen, als heißes Wasser von Hand neu zu erfinden. Wenn es keine gibt, würde auch Scripting funktionieren. TY. Gatto

0
Das ist nicht sehr klar ... Ich versuche es mit einigen Zeilenumbrüchen (nur?) Zu bearbeiten, aber wenn Sie es näher erläutern können, könnte dies hilfreicher sein Xen2050 vor 7 Jahren 0

1 Antwort auf die Frage

0
Xen2050

Schauen Sie sich die infoSeiten für einfaches Altes an cp. Ein Befehl wie

cp --archive --backup --suffix="-original" A/* B 

Sollte jede Datei von A nach B kopiert werden, und wenn bereits Dateien vorhanden sind (in Konflikt stehende Dateinamen), wird die vorhandene Zieldatei in umbenannt [name]-original(dh es wird zuerst eine Sicherung durchgeführt).

Wenn Sie es erneut ausführen, verwenden Sie --no-clobberstattdessen --backupund --suffixsollten alle verbleibenden Dateien nur in B in A kopieren

cp --archive --no-clobber --exclude='*-original' B/* A 

Dies sollte die [name]-originalDateien in B ausschließen . Vergewissern Sie sich, dass zu Beginn keine Dateien mit diesem Suffix vorhanden sind.

Und fügen Sie ein hinzu, um -vzu sehen, was los ist.

[Versucht - Rekursiv aber es war nicht ganz so wie erwartet]