Ich bin verwirrt über die Funktionsweise von rsync. Hier ist, was ich getan habe und was ich erwartet habe.
Ich habe zwei Ordner mit den Namen „sbck“ und „dbck“ erstellt.
Szenario 1:
Ich habe eine Datei mit dem Namen erstellt a.txt
und eine Kopie davon mit erstellt cp -rp a.txt aa.txt
. Ich habe beide Dateien in sbck
einem Ordner abgelegt. Als nächstes habe ich getan rsync -rvch sbck/ dbck/
. Dadurch wurden beide Dateien in dbck verschoben.
Frage: Da sowohl a.txt als auch aa.txt gleich sind, warum lässt rsync diese Kopie zu? Sollte es nicht nur eines von beiden sein?
Szenario 2:
Ich habe eine Datei mit dem Namen erstellt a.txt
und eine Kopie davon mit erstellt cp -rp a.txt aa.txt
. Ich habe beide Dateien in sbck
einem Ordner abgelegt. Als Nächstes habe ich getan cp -rp sbck/a.txt dbck/
. Später habe ich getan rsync -rvch sbck/ dbck/
. Dadurch wurde die aa.txt
in dbck verschoben.
Frage: Da sowohl a.txt als auch aa.txt gleich sind und ich a.txt bereits nach dbck verschoben habe. Warum erlaubt rsync das Kopieren von aa.txt nach dbck? Wie genau hilft mir -c in diesem Szenario?
Antwort1
Ich glaube, Sie verstehen nicht, was das -c
tut. rsync
führt keine Dateideduplizierung durch, mit oder ohne die -c
Option. -c
Es ändert lediglich, wie rsync
entschieden wird, ob eine Datei am Ziel aktualisiert werden muss.
Angenommen sbck/a.txt
und dbck/a.txt
, und Sie führen aus rsync -rvh sbck/ dbck/
(Hinweis: keine -c
Option). Dabei rsync
werden die Größe und Änderungszeit dieser beiden Dateien verglichen. Wenn sie übereinstimmen, wird davon ausgegangen, dass auch der Inhalt der Dateien übereinstimmt, und das Kopieren nach wird nicht sbck/a.txt
durchgeführt dbck/a.txt
.
Nehmen wir nun an, Sie führen rsync -rvch sbck/ dbck/
(mit -c
dieser Zeit) aus. Dieses Mal rsync
berechnet Prüfsummen von sbck/a.txt
und dbck/a.txt
und verwendet diese (anstelle ihrer Größe und Mod-Zeiten), um zu bestimmen, ob die Dateien gleich sind und daher der neue Inhalt von sbck/a.txt
nicht nach kopiert werden muss dbck/a.txt
. Es vergleicht die Prüfsumme von nicht sbck/a.txt
mit der einer anderen Datei im Quell- oder Zielbaum.