rsync: Probleme mit Sonderzeichen beim Netzwerk-Sync

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Xenia
Beiträge: 32
Registriert: 20.10.2008 10:02:04

rsync: Probleme mit Sonderzeichen beim Netzwerk-Sync

Beitrag von Xenia » 01.08.2009 18:30:11

Hallo Zusammen,

ich bastel grad an einem python script, das mittels pyinotify und rsync Dateien direkt nach Änderung auf einen 2. Server synchronisiert.
Dabei bin ich auf folgendes Problem gestoßen:

Überwacht wird eine Samba Freigabe. Wenn z.B. ein neues Verzeichniss von Windows erstellt wird (z.B. Neuer Ordner (2)) soll dieses synchronisiert werden.

Synchronisiere ich lokal mittels
rsync -d "/Samba/Neuer Ordner (2)" "/SambaSpiegel/Neuer Ordner (2)" ist alles ok.

Sychronisiere ich per ssh auf einen anderen Rechner mittels:
rsync -e "ssh -i /pfad/keydatei" -d "/Samba/Neuer Ordner (2)" "192.168.1.33:/SambaSpiegel/Neuer Ordner (2)"

Wird auf dem 2. Rechner eine Datei mit Namen "Neuer" angelegt. Für Ordner und (2) bekomme ich eine Fehlermeldung von rsync. Ändere ich die Zeile in:
rsync -e "ssh -i /pfad/keydatei" -d "/Samba/Neuer Ordner (2)" "192.168.1.33:/SambaSpiegel/Neuer\ Ordner\ (2)"
meckert rsycn über die Klammer. Setze ich '(' und ')' in Anführungszeichen läuft alles perfekt. Doch andere Sonderzeichen machen auch Probleme:

Wenn ich z.B. ein ! in den Dateinamen einfüge ist es völlig egal, ob ich es in Anführungszeichen setze oder nicht ich bekomme immer folgende Fehlermeldung:

-bash: !": event not found.

Was mache ich falsch?!?

Freue mich über jede Hilfe!

Xenia

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: rsync: Probleme mit Sonderzeichen beim Netzwerk-Sync

Beitrag von rendegast » 02.08.2009 12:30:05

Vielleicht so?
"192.168.1.33:/SambaSpiegel/Neuer\ Ordner\ (2)"
->
192.168.1.33:"/SambaSpiegel/Neuer\ Ordner\ \(2\)"
oder
192.168.1.33:'/SambaSpiegel/Neuer\ Ordner\ \(2\)'


(Sollte nicht bei der Quelle auch gequoted werden?)
'--protect-args' sollte das Quoten (zumindest für die Leerstellen und einige Sonderzeichen) einsparen, siehe:
ADVANCED USAGE

The syntax for requesting multiple files from a remote host is done by specifying additional remote-host args in the same style as the first, or with the hostname omitted. For instance, all these work:

rsync -av host:file1 :file2 host:file{3,4} /dest/
rsync -av host::modname/file{1,2} host::modname/file3 /dest/
rsync -av host::modname/file1 ::modname/file{3,4}

Older versions of rsync required using quoted spaces in the SRC, like these examples:

rsync -av host:'dir1/file1 dir2/file2' /dest
rsync host::'modname/dir1/file1 modname/dir2/file2' /dest

This word-splitting still works (by default) in the latest rsync, but is not as easy to use as the first method.

If you need to transfer a filename that contains whitespace, you can either specify the --protect-args (-s) option, or you'll need to escape the whitespace in a way that the remote shell will understand. For instance:

rsync -av host:'file\ name\ with\ spaces' /dest
...
...
-s, --protect-args
This option sends all filenames and some options to the remote rsync without allowing the remote shell to interpret them. This means that spaces are not split in names, and any non-wildcard special characters are not translated (such as ~, $, ;, &, etc.). Wildcards are expanded on the remote host by rsync (instead of the shell doing it).

If you use this option with --iconv, the args will also be translated from the local to the remote character-set. The translation happens before wild-cards are expanded. See also the --files-from option.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten