Ich habe zwei Kopien eines Ordners
src/
dest/
Ich möchte sie folgendermaßen zusammenführen:
Wenn sich eine Datei nur in befindet src
, möchte ich, dass sie in verschoben wirddest
Wenn eine Datei nur in ist dest
, möchte ich, dass sie ignoriert wird und der IE in Ruhe gelassen wird.
Wenn sich eine Datei in beiden Ordnern befindet und identischen Inhalt hat (dh gleiche Größe und Datum), löschen Sie vonsrc
Wenn sich eine Datei in beiden Ordnern befindet und nicht den gleichen Inhalt hat, lassen Sie sie zurück, src
damit ich sie manuell zusammenführen kann.
Nur eine sehr kleine Anzahl von Dateien (zwischen 0% und 5% der gesamten Dateien) sollte in dieser letzten Kategorie enthalten sein, aber ich weiß nicht, wie ich das in beiden und das gleiche von beiden trennen soll, aber unterschiedlich.
Ich habe versucht, herauszufinden, wie man das macht, rsync
aber bisher ohne Erfolg.
for file in `find src/ -type f`; do diff $file `echo $file | sed 's/src/dest/'` && rm $file || echo $file; done
(Sie können das überspringen,|| echo $file
wenn Sie möchten, es ist der Vollständigkeit\?*[
Initiale-
). Sie müssen Variablenersetzungen in doppelte Anführungszeichen setzen ,--
vor Dateinamen an Dienstprogramme übergeben undfind … -exec …
die Ausgabe von verwenden, anstatt sie zu analysierenfind
. Mit einemrm
Befehl in der Mischung ist dies ein Rezept für eine Katastrophe.unison ist das Werkzeug, das Sie suchen. Versuchen Sie unison-gtk, wenn Sie eine GUI bevorzugen. Ich glaube aber nicht, dass ähnliche Dateien gelöscht werden. Versuchen Sie, beide Verzeichnisse identisch zu halten. Trotzdem wird es leicht 1) identifizieren, welche Dateien kopiert werden sollen; 2) welche müssen manuell zusammengeführt werden.
quelle
Das folgende Skript sollte die Dinge vernünftig machen. Es verschiebt Dateien von der Quelle zum Ziel, überschreibt niemals eine Datei und erstellt bei Bedarf Verzeichnisse. Quelldateien, deren Ziel eine andere Datei ist, werden ebenso wie Dateien, die keine regulären Dateien oder Verzeichnisse sind (z. B. symbolische Links), alleine gelassen. Die in der Quelle verbleibenden Dateien sind diejenigen, für die ein Konflikt vorliegt. Vorsicht, ich habe es überhaupt nicht getestet.
Ein anderer Ansatz wäre, ein Union-Mount- Verzeichnis übereinander durchzuführen , beispielsweise mit funionfs oder unionfs-fuse .
quelle