Kiedy używasz SSH do łączenia rsync ze zdalnym serwerem, w jaki sposób unikasz spacji i tym podobnych na zdalnej ścieżce? Prosty ukośnik odwraca miejsce dla znaku zachęty lokalnego bash, ale na zdalnej maszynie przestrzeń jest następnie odczytywana jako przerwa na ścieżce, oznaczając w ten sposób koniec tej ścieżki.
Kiedy więc to robię rsync -avz /path/to/source/some\ dir/ user@host.tld:/path/to/dest/some\ dir/
, zdalny serwer odczytuje to jako słuszne /path/to/dest/some/
i ponieważ nie może zdalnie znaleźć tego miejsca docelowego, ponieważ rzeczywistym miejscem docelowym jest „niektóre katalog”, a nie tylko „niektóre”.
Jeśli spróbuję wykonać to samo polecenie i uciec od ukośnika odwrotnego i miejsca, aby ominąć lokalny monit bash i zachować odwrotny ukośnik dla zdalnego serwera (łącznie trzy ukośniki odwrotne:) /path/to/dest/some\\\ dir/
, to rzeczywiście wysyła odwrotny ukośnik do zdalnego serwera, ale zdalny serwer następnie interpretuje ścieżkę /path/to/dest/some\/
raczej niż /path/to/dest/some\ dir/
rozbija spację i znaki po niej.
Jeśli spróbuję zawinąć ścieżkę w cudzysłów, zachowuje się ona w ten sam sposób, skutecznie odcinając ścieżkę w przestrzeni. Więc to działa tylko, aby ominąć lokalny monit bash.
Początkowo korzystałem ze ścieżki, w której znajdował się segment „-” (spacja-myślnik-spacja), a serwer zdalny zwrócił błąd, rsync: on remote machine: -: unknown option
który w pierwszej kolejności zapoczątkował tę ucieczkę w przestrzeń.
Co więc muszę zrobić, aby działało to poprawnie ze zdalnym serwerem, bez konieczności usuwania spacji lub innych błędnych znaków, takich jak łączniki ze zdalnej ścieżki?
-s
rozwiązuje problem bez konieczności zastosowania podwójnej ucieczki ręcznie.