Wie können Sie Leerzeichen und dergleichen im Remote-Pfad umgehen, wenn Sie SSH verwenden, um rsync mit einem Remote-Server zu verbinden? Ein einfacher Backslash entgeht dem Leerzeichen für die lokale Bash-Eingabeaufforderung, aber auf dem Remotecomputer wird das Leerzeichen dann als Unterbrechung des Pfads gelesen, wodurch das Ende dieses Pfads markiert wird.
Wenn ich also tue rsync -avz /path/to/source/some\ dir/ user@host.tld:/path/to/dest/some\ dir/
, liest der Remote-Server dies als gerecht /path/to/dest/some/
und da er dieses Ziel nicht aus der Ferne finden kann, weil das eigentliche Ziel "irgendein Verzeichnis" und nicht nur "irgendein" ist.
Wenn ich den gleichen Befehl versuche und dem Backslash und dem Leerzeichen entkomme, um die lokale Bash-Eingabeaufforderung zu umgehen und den Backslash für den Remote-Server beizubehalten (insgesamt drei Backslashes /path/to/dest/some\\\ dir/
:), wird der Backslash zwar an den Remote-Server, aber an den Remote-Server gesendet dann interpretiert den Pfad als /path/to/dest/some\/
anstatt /path/to/dest/some\ dir/
noch den Raum und die Zeichen nach dem Strippen.
Wenn ich versuche, den Pfad in Anführungszeichen zu setzen, verhält es sich fast genauso und schneidet den Pfad an der Stelle effektiv ab. Es funktioniert also auch nur, um die lokale Bash-Eingabeaufforderung zu überwinden.
Ursprünglich verwendete ich einen Pfad, der ein "-" (Space-Hyphen-Space) -Segment enthielt, und der Remote-Server gab einen Fehler zurück, rsync: on remote machine: -: unknown option
der dieses ganze raumflüchtige Unterfangen überhaupt erst auslöste.
Was muss ich also tun, damit dies ordnungsgemäß mit dem Remote-Server funktioniert, ohne dass Leerzeichen oder andere fehlerhafte Zeichen wie Bindestriche aus dem Remote-Pfad entfernt werden müssen?
-s
behebt das Problem, ohne dass Double-Escape manuell angewendet werden muss.