Lorsque vous utilisez SSH pour connecter rsync à un serveur distant, comment échappez-vous aux espaces et autres dans le chemin distant? Une simple barre oblique inverse échappe à l'espace pour l'invite bash locale, mais sur la machine distante, l'espace est alors lu comme une interruption du chemin, marquant ainsi la fin de ce chemin.
Donc, quand je fais rsync -avz /path/to/source/some\ dir/ user@host.tld:/path/to/dest/some\ dir/
ce qui se passe, c'est que le serveur distant lit cela comme juste /path/to/dest/some/
et puisqu'il ne peut pas trouver cette destination à distance, car la destination réelle est "certains dir" plutôt que simplement "certains".
Si j'essaye la même commande et échappe à la barre oblique inverse et à l'espace pour dépasser l'invite bash locale et maintenir la barre oblique inverse pour le serveur distant (trois barres obliques inversées au total:) /path/to/dest/some\\\ dir/
, cela envoie en effet la barre oblique inverse au serveur distant, mais au serveur distant interprète ensuite le chemin d'accès /path/to/dest/some\/
plutôt que de /path/to/dest/some\ dir/
supprimer l'espace et les caractères qui le suivent.
Si j'essaie de boucler le chemin avec des guillemets, il se comporte à peu près de la même manière, coupant efficacement le chemin dans l'espace. Donc, cela ne fonctionne que pour dépasser l'invite bash locale.
Au départ, j'utilisais un chemin qui contenait un segment "-" (espace-trait d'union-espace), et le serveur distant renvoyait une erreur rsync: on remote machine: -: unknown option
qui est à l'origine de cette tentative d'échapper à l'espace.
Alors, que dois-je faire pour que cela fonctionne correctement avec le serveur distant, sans avoir à supprimer les espaces ou autres caractères erronés comme les tirets du chemin distant?
-s
résout le problème sans qu'il soit nécessaire d'appliquer manuellement le double échappement.