PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rsync auf Zielsystem nur in einem Verzeichniss



MDCYP
09.06.11, 09:40
Hallo,

folgendes Szenario:

- Quellsystem A kann nur via SSH auf Zielsystem B (firewall lässt nur diese Richtung zu)

- Auf Quellsystem A werden Datein hochgeladen unter ~/incoming - allerdings werden von den Usern auch möglicherweise Unterverzeichnisse erstellt - also z.b. ~/incoming/User123/file.data

- es soll jetzt via cronjob alle 12std überprüft werden ob in ~/incoming/*
neue Datein hochgeladen worden sind

- wenn JA dann soll auf dem Zielsystem B (nach Vorlage von http://troy.jdmz.net/rsync/ ) allerdings ALLE Dateien auf den ggf. erstellen Unterzeichnissen in EIN Hauptverzeichniss übertragen werden

- die Übertragung / cronjob läuft auf dem Quellsystem A (weil ja nur von da ssh zum Zielsystem B möglich ist)

Meine Frage ist also Hauptsächlich.. wie wäre die rsync Syntax das beim Zielsystem keine Ordnerstruktur wie beim Quellsystem erstellt wird sondern alle Dateien auf allen Unterordnern des Quellsystems auf dem Zielsystem in ein Verzeichniss gepackt werden

marce
09.06.11, 09:47
dürfte rein mit rsync nicht gehen.

entweder (1) lokal auf A ein "sync-VZ" erstellen, in dem z.b. die Files von dem regulären VZ reingelinkt werden und welches dann gesynct wird oder (2) jedes auf A gefundene File einzeln per rsync in das Ziel-VZ transferieren lassen.

(2) dürfte die einfachere Lösung sein.

Generell unglücklich ist bei der Lösung allerdings, was passiert, wenn 2 User unterschiedliche Dateien mit gleichem Dateinamen hochladen...

MDCYP
09.06.11, 10:10
"was passiert, wenn 2 User unterschiedliche Dateien mit gleichem Dateinamen hochladen... "
Der Fall kann ausgeschlossen werden.

pibi
09.06.11, 10:35
Der Fall kann ausgeschlossen werden.Wenn Du das sagst .... ;-)

Nur eine Idee: Warum kopierst Du auf Rechner A nicht alle hochgeladenen Files in ein einziges Directory und synchronisierst dann dieses via rsync mit Rechner B? Stichworte dazu sind "find" und "basename". Wenn die Files zu gross sind, kannst Du anstelle einer Kopie auch einen Hardlink anlegen.

Gruss Pit.

marce
09.06.11, 11:16
klingt nach meiner Lösung (1) :-)

MDCYP
09.06.11, 15:48
Eine Frage hätte ich noch..

$RSYNC -az $LPATH -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH

so ist es jetzt realisiert...
Dabei wäre es aber schön wenn er nach dem übertragen die Dateien vom quellsystem wo dieser rsync läuft LÖSCHT damit sie beim nächsten mal nicht wieder übertragen werden - da die Daten auf dem Quellsystem entfenrt werden.

pibi
09.06.11, 18:11
$RSYNC -az $LPATH -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH
so ist es jetzt realisiert...Das ist ein ganz normales rsync, welches die Directory-Struktur 1:1 uebertraegt. Aber das wolltest Du ja nicht. Also unterschlaegst Du uns einen Teil der Befehle:-(
Dabei wäre es aber schön wenn er nach dem übertragen die Dateien vom quellsystem wo dieser rsync läuft LÖSCHT damit sie beim nächsten mal nicht wieder übertragen werden - da die Daten auf dem Quellsystem entfenrt werden.Eben. Dazu muessten wir das GANZE Script kennen.

Ausserdem vermute ich einen Tippfehler: Wenn die Files vom Quellsystem entfernt werden, muss man sie nicht mehr separat loeschen.

Gruss Pit.

marce
11.06.11, 08:17
wenn das Script bzw. der rsync nach dem sync lokal löschen soll - ein Blick in die man-Page sollte da ausreichen...