Rsync über SSH-Pfad mit Leerzeichen funktioniert nicht mit Anführungszeichen

16

Ich kann erfolgreich RSYNC über SSH ausführen, solange die Pfade keine Leerzeichen enthalten.

Wenn der Pfad Leerzeichen enthält, funktioniert er nicht. Ich habe Schrägstriche, Anführungszeichen und doppelte Anführungszeichen versucht.

Wenn ich Schrägstriche verwende, wird in der Ausgabe angegeben, dass es ein Erfolg ist, es werden jedoch keine übertragenen Dateien angezeigt.

rsync -avz /path\ with\ spaces/ user@remotelocation:/media/another\ path\ with/spaces/

Wenn ich einfache oder doppelte Anführungszeichen verwende, wird mir mitgeteilt, dass die Berechtigung nach Eingabe meines Kennworts verweigert wird

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Was kann ich tun?

Vielen Dank.

AndrewMRiv
quelle

Antworten:

11

Erweitern Sie die Antwort von rzr mit Beispielcode und Referenzen, fügen Sie einfach das -sFlag hinzu, zitieren Sie die Pfade und sorgen Sie sich nicht um das Entweichen von Leerzeichen im Remote-Pfad:

rsync -avzs '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Zu Referenzzwecken die vom OP angegebenen Optionen:

  • -a, Archivierungsmodus, entspricht -rlptgoD (no -H, -A, -X)
    • Beinhaltet:
    • -r, --recursive, rekursiv in Verzeichnisse
    • -l, --links, kopiere symlinks als symlinks
    • -p, --perms, Berechtigungen beibehalten
    • -t, --times, Änderungszeiten beibehalten
    • -g, --group, Gruppe erhalten
    • -o, --owner, Eigentümer beibehalten (nur Superuser)
    • -Geräte, Gerätedateien erhalten (nur Superuser)
    • -specials, spezielle Dateien erhalten
  • -v, --verbose, verbosity erhöhen
  • -z, --compress, komprimiert Dateidaten während der Übertragung

Der zusätzliche Parameter benötigt:

  • -s, --protect-args, keine Leerzeichen, nur Platzhalterzeichen
Binärsubstrat
quelle
13

Sie müssen Leerzeichen sowohl in der lokalen Shell als auch in der Remote-Shell maskieren. Versuche dies:

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another\ path\ with/spaces/'

Der Quellcode /path with spaces/in der lokalen Shell kann nur durch einfache Anführungszeichen um ihn herum maskiert werden '/path with spaces/'.

Im Fall des Ziels wird die lokale Shell durch einfache Anführungszeichen und die Leerzeichen in der Remote-Shell durch Verwenden des Escape-Zeichens ( \) vor den Leerzeichen maskiert.

heemayl
quelle
3
Nur um zu betonen - Sie brauchen beide Anführungszeichen und Backslashes.
Sridhar Sarnobat
1

Schauen Sie sich die Option -protect-args (-s) von rsync an, es sind keine zusätzlichen Schrägstriche erforderlich

rzr
quelle
1
Ihre Antwort wäre viel besser, wenn Sie ein Beispiel angeben würden, dem der unerfahrene Benutzer folgen könnte. Vielen Dank!
Elder Geek