Rsync przez ścieżkę SSH ze spacjami nie działa z cudzysłowami

17

Jestem w stanie pomyślnie RSYNC przez SSH, o ile na ścieżkach nie ma spacji.

Gdy ścieżka ma spacje, nie działa. Próbowałem ukośników, cytatów i podwójnych cytatów.

Kiedy używam ukośników, dane wyjściowe wskazują, że jest to sukces, ale nie widzę przesłanych plików.

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

Kiedy używam pojedynczego lub podwójnego cudzysłowu, oznacza to, że po wprowadzeniu hasła nie można uzyskać zgody

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

Co mogę zrobić?

Dziękuję Ci.

AndrewMRiv
źródło

Odpowiedzi:

12

Rozwijając odpowiedź rzr z przykładowym kodem i referencjami, po prostu dodaj -sflagę, zacytuj ścieżki i nie martw się o ucieczkę spacji na zdalnej ścieżce:

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

Dla porównania, opcje określone przez PO:

  • -a, tryb archiwizacji, jest równy -rlptgoD (bez -H, -A, -X)
    • Obejmuje:
    • -r, --recursive, recurse to katalogi
    • -l, --links, kopiuj dowiązania symboliczne jako dowiązania symboliczne
    • -p, --perms, zachowaj uprawnienia
    • -t, --times, zachowaj czasy modyfikacji
    • -g, --group, zachowaj grupę
    • -o, - właściciel, zachowaj właściciela (tylko superużytkownik)
    • -urządzenia, zachowaj pliki urządzeń (tylko superużytkownik)
    • -specjalne, zachowaj specjalne pliki
  • -v, --verbose, zwiększa gadatliwość
  • -z, --compress, kompresuje dane pliku podczas przesyłania

Potrzebny dodatkowy parametr:

  • -s, --protect-args, bez podziału przestrzeni, tylko znaki wieloznaczne
binarny substrat
źródło
13

Musisz uciec spacji zarówno w powłoce lokalnej, jak i zdalnej. Spróbuj tego:

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

Źródło, /path with spaces/w lokalnej powłoce, można uciec tylko poprzez umieszczenie wokół niego pojedynczych cudzysłowów, tj '/path with spaces/'.

Z drugiej strony, w przypadku miejsca docelowego, lokalna powłoka jest uciekana przez umieszczenie pojedynczych cudzysłowów, a spacje są ucieczkowe w zdalnej powłoce za pomocą znaku zmiany znaczenia ( \) przed spacjami.

heemayl
źródło
3
Tylko dla podkreślenia - potrzebujesz OBU cytatów i ukośników odwrotnych.
Sridhar Sarnobat
2

spójrz na opcję rsync –protect-args (-s), nie potrzeba żadnych dodatkowych ukośników

rzr
źródło
1
Twoja odpowiedź byłaby znacznie lepsza, gdybyś podał przykład, który może naśladować początkujący użytkownik. Dziękuję Ci!
Starszy Geek