Soll rsync die Datei von der Quelle zum Ziel verschieben?

15

Ist rsync eine gute Wahl für mein Projekt?

Ich muss:
- Dateien per SSH vom Quellordner in den Zielordner
kopieren,
- sicherstellen, dass alle Dateien kopiert wurden, - Quelldateien nach dem Kopieren löschen.
- Wenn ich einen Konfliktnamen habe, muss ich die Dateien umbenennen.

Es sieht so aus, als könnte ich folgende Option verwenden: --remove-source-files (um Quelldateien zu löschen)
Aber wie kann ich mit rsync Konflikte verwalten? Kann ich Regeln haben?

Anwendungsfall für mein Projekt:

Ich führe eine wissenschaftliche Berechnung auf Server A durch und die Ergebnisse werden in den Ordner "process" eingefügt. Für jede Berechnung habe ich ein Repository wie das folgende: / 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 auch "calc2" in "/ process /" verzeichnis auf server B zu verschieben, dann habe ich jetzt auf server B:
- / process / calc1
- / process / calc2
(und / process / auf server A ist leer).

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

Ist es möglich, Regeln mit rsync hinzuzufügen und "/ process / calc1" durch "process / calc1R2" auf Server B umzubenennen? Und so weiter (zB calc1R3)?

Vielen Dank.

user44782
quelle

Antworten:

11

Wenn Sie wirklich rsync verwenden möchten, brauchen Sie eine Kombination aus --backup, --backup-dir und --suffix. Ich denke, der nächste, den du bekommen könntest, ist mit so etwas

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

Dies würde in etwa das tun, was Sie möchten, aber die Dateien würden nicht genau so umbenannt, wie Sie es möchten. Mit der Option --suffix wird Text an das Ende einer vorhandenen Datei angehängt, dies jedoch nur für den ersten Konflikt. Wenn Sie es erneut ausführen, wird nur Ihre erste Sicherung überschrieben. Sie müssten diesen Suffixwert jedes Mal ändern, wenn der Befehl ausgeführt wird. Dies würde funktionieren, wenn Sie etwas mit einem Zeitstempel verwenden, z.

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

Ich bin mir nicht sicher, ob dies zu viel für das ist, was Sie suchen, aber es sollte Ihren Anforderungen entsprechen.

Paul Kroon
quelle
Ich kann nach der Berechnung große Dateien haben, daher ist es wahrscheinlich besser, rsync zu verwenden (im Falle von Netzwerkproblemen).
user44782
1

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 du tun möchtest.

Anscheinend möchten Sie nur einige Dateien verschieben. Sie müssen dafür nicht rsync verwenden. Anscheinend verwenden Sie Linux oder BSD. 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 existieren könnte. Die Dateien werden von der Quelle zum Ziel kopiert und dann von der Quelle entfernt. Möchten Sie dieselben Berechnungen erneut ausführen? Erhalten Sie deshalb Dateien mit demselben Namen? Ich würde vorschlagen, eine Lauf- oder Chargennummer an den Ordnernamen anzuhängen. Das soll sowieso klar sein. Haben Sie Kontrolle darüber, wie der Ordner benannt wird? Noch mehr Details? Ich würde empfehlen, die Befehle in ein Bash-Skript oder ähnliches zu schreiben.

d -_- b
quelle
In einigen Fällen muss ich dieselbe Berechnung erneut ausführen (und aus diesem Grund habe ich Dateien mit demselben Namen). Richtig, einen Lauf anzufügen ist eine gute Idee: Finden Sie auch das Kommando mmv -a (Ich hoffe, es funktioniert im ssh-Modus, jemand benutzt bereits diese Kommandozeile?). Ich habe die Kontrolle darüber, wie der Ordner benannt wird.
user44782
Es ist höchstwahrscheinlich nicht auf dem Computer installiert. Wenn es Ihr Computer ist, können Sie es jedoch installieren. Debian-basiert: sudo apt-get install mmv Sie könnten sich auch mit sshfs oder NFS befassen und Dateien direkt an das endgültige Ziel ausgeben lassen. Es sei denn, es ist ein Zwischenstandort erforderlich (Inspektion, Änderung usw.). Wenn die Verbindung zwischen den beiden Maschinen unzuverlässig ist, ist das natürlich eine schlechte Idee. Pauls Vorschlag ist gut. Das Anhängen der Laufnummer am Anfang wäre jedoch wahrscheinlich besser organisiert.
d -_- b
1
Wie benutzt man "mv -n" über ssh? Sie können MV über SSHFS verwenden.
Guettli
Ops ... Ja, das macht es klarer.
d -_- b
-1

Verwenden Sie für SSH zusammenfassend Folgendes:

Zugriff über Remote Shell:

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

Push: rsync [OPTION ...] SRC ... [USER @] HOST: DEST

Alles wird in rsync (1) erklärt.

Um ein Skript für einen Cronjob zu erstellen und ssh automatisch ohne Passwort zu synchronisieren, schauen Sie auch in ssh-agent (1) nach.


quelle