Wie kann ich rsync dazu bringen, Dateien von der Quelle zum Ziel zu verschieben?

Wie kann ich rsync dazu bringen, Dateien von der Quelle zum Ziel zu verschieben?

Ist rsync eine gute Wahl für mein Projekt?

Ich muss:
– Dateien per SSH vom Quell- in den Zielordner kopieren,
– sicherstellen, dass alle Dateien kopiert wurden,
– Quelldateien nach dem Kopieren löschen.
– bei Namenskonflikten muss ich die Dateien umbenennen.

Es sieht so aus, als ob ich die Option --remove-source-files verwenden könnte (um Quelldateien zu löschen).
Aber wie geht rsync mit Konflikten um, kann ich Regeln haben?

Anwendungsfall in meinem Projekt:

Ich führe eine wissenschaftliche Berechnung auf Server A aus und die Ergebnisse werden in den Ordner „process“ eingefügt. Für jede Berechnung habe ich ein Repository wie dieses: /process/calc1.
Jetzt möchte ich das Repository „/calc1“ auf Server B übertragen (ich erhalte /process/calc1) und „calc1“ von Server A löschen.
… Während einer anderen Berechnung erhalte ich „/process/calc2“ auf Server A. Die Idee ist, „calc2“ auch in das Verzeichnis „/process/“ auf Server B zu verschieben. Dann habe ich jetzt auf Server B:
- /process/calc1
- /process/calc2
(und /process/ auf Server A ist leer).

Wie bewältigt rsync Konflikte (auf Server B), wenn ich nach einer neuen Berechnung einen anderen Ordner wie „/process/calc1“ auf Server A habe (wenn „/process/calc1“ auf Server B bereits vorhanden ist)?

Ist es möglich, mit rsync Regeln hinzuzufügen und auf Server B „/process/calc1“ in „process/calc1R2“ umzubenennen? Und so weiter (z. B. calc1R3)?

Danke.

Antwort1

Wenn Sie wirklich rsync verwenden möchten, benötigen Sie eine Kombination aus --backup, --backup-dir und --suffix. Am nächsten kommen Sie dem wohl mit so etwas

rsync -abv --suffix R1 --remove-source-files src/ dst/

Dies würde fast das erreichen, was Sie möchten, aber die Dateien würden nicht genau so umbenannt, wie Sie es möchten. Die Option --suffix hängt Text an das Ende einer vorhandenen Datei an, aber das tut sie nur beim ersten Konflikt. Wenn Sie sie erneut ausführen würden, würde sie einfach Ihre erste Sicherung überschreiben. Sie müssten diesen Suffixwert bei jeder Ausführung des Befehls ändern, was funktionieren würde, wenn Sie etwas mit einem Zeitstempel verwenden würden, wie das hier:

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

Ich bin nicht sicher, ob das für Ihr Vorhaben übertrieben ist, aber Ihren Anforderungen sollte es genügen.

Antwort2

Wie der Name schon sagt, wird rsync zum Synchronisieren von Dateien verwendet. Wenn „synchronisiert“ bedeutet dies, dass die Dateien auf der Quelle und dem Ziel identisch sind. Das scheint nicht das zu sein, was Sie tun möchten.

Es scheint, als ob Sie nur einige Dateien verschieben möchten. Dafür müssen Sie kein rsync verwenden. Es scheint, als ob Sie Linux oder BSD verwenden. Sie könnten mv -n über ssh verwenden. Die Option -n überschreibt keine vorhandenen Dateien. Dies ist nicht 100 % automatisch. Ich sehe jedoch nicht, wie die Datei in Ihrem Fall bereits vorhanden sein könnte. Die Dateien werden von der Quelle zum Ziel kopiert und dann aus der Quelle entfernt. Möchten Sie dieselben Berechnungen erneut ausführen? Ist das der Grund, warum Sie Dateien mit demselben Namen erhalten? Ich würde vorschlagen, dem Ordnernamen eine Lauf- oder Batchnummer anzuhängen. Das sollte ohnehin klar sein. Haben Sie irgendeine Kontrolle darüber, wie der Ordner benannt wird? Weitere Einzelheiten? Ich würde empfehlen, die Befehle in ein Bash-Skript oder Ähnliches einzufügen.

Antwort3

Für SSH verwenden Sie zusammenfassend Folgendes:

Zugriff über Remote-Shell:

Pull: rsync [OPTION...] [USER@]HOST:SRC... [ZIEL]

Push: rsync [OPTION...] SRC... [BENUTZER@]HOST:ZIEL

Es wird alles in rsync(1) erklärt.

Wenn Sie es für einen Cronjob skripten möchten, um automatisch über SSH zu rsyncen, ohne dass ein Passwort erforderlich ist, sehen Sie sich auch ssh-agent(1) an.

verwandte Informationen