Próbuję zsynchronizować rsync z jednego serwera na drugi. Serwery mają tę samą strukturę katalogów, ale mam problem z tym, aby serwer pilotów prawidłowo rozpoznał nazwę ścieżki na pilocie, gdy jest w nim miejsce.
Oto szczegóły
Katalog lokalny to
mnt/xlses/split/v2/name with space
Zdalny katalog to
mnt/xlses/split/v2/name with space
Próbowałem wszystkiego, co udało mi się znaleźć
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ [email protected]:/mnt/xlses/split/v2/"name with space"
kiedy to uruchamia pierwszą rzeczą, którą zgłasza, jest to, że tworzy nowy katalog
Przerywam i widzę, że jest nowy katalog
mnt/xlses/split/v2/name
wszystkie moje pliki znajdują się w tym katalogu
Spodziewałem się ich
mnt/xlses/split/v2/name with space
Próbować
Od
man rsync
:źródło
man rsync
i wyszukując (/s
) dla „--protect”. Aby zainstalować z Homebrew:brew install homebrew/dupes/rsync
Jeśli nie znaleziono, uruchombrew search rsync
.rsync -Pavuz 'you@host:~/file\ with\ spaces' ./
Działa to w bash: Escape the space with backslash, a następnie użyj cudzysłowów:
Lub jeśli masz ścieżkę w zmiennej $ remote_path, spacje mogą być zastępowane przez podstawienie:
źródło
-s
opcja działa na każdej nowoczesnej wersji rsync i ma na celu rozwiązanie tego problemuUżyj dwóch par cytatów
Nie przejmuj się wszystkimi odwrotnymi ukośnikami, po prostu użyj pojedynczych cudzysłowów wewnątrz podwójnych cudzysłowów :
Możesz także użyć odwrotności, czyli podwójnych cudzysłowów w pojedynczych cudzysłowach :
Dalsze informacje
Symbole wieloznaczne po stronie serwera
Jeśli chcesz,
*
aby interpretacja odbywała się na serwerze, a nie na kliencie,*
musisz wpisać tylko jedną z 2 par cytatów. Uważam, że jest to sprzeczne z intuicją, ponieważ logicznie zewnętrzna para cytatów unika interpretacji klienta, podczas gdy wewnętrzna para cytatów ucieka od interpretacji serwera.Chroń argumenty
Zaletą w porównaniu z
--protect-args
rozwiązaniem jest to, że tak naprawdę nie masz ograniczeń--protect-args
, więc możesz używać znaków specjalnych, takich jak~
lub$
. Możesz więc napisać:lub
Zauważ, że tylda (
~
) w drugim przykładzie musi znajdować się poza podwójnymi cudzysłowami.Możesz umieścić jedną z par cytatów wokół całej nazwy użytkownika @ host: część pliku (np.
ssh "[email protected]:'/home/me/test file'" .
)źródło
Rozumiem, że to stare pytanie, ale pomyślałem, że uzupełnię istniejącą wiedzę.
Korzystałem
rsync
z wielu folderów ze spacją i to działa. Mam foldery o numerach od 1 do 10 w następujący sposób:The\ Folder1
The\ Folder2
The\ Folder3
The\ Folder10
2 instancje, których chcesz użyć,
rsync
są lokalne i zdalne.Lokalne - zwróć uwagę na brak cytatów.
Zdalne - Zwróć uwagę na obecność cytatów
źródło
Mówiąc ogólnie, zacytuj argument i unikaj spacji w argumencie. W podanym przykładzie spróbuj:
źródło
Ze stron
rsync
:źródło
Cóż, sam odpowiem na to pytanie, chociaż ktoś inny mógłby lepiej to wyjaśnić.
Oczywiście konfiguracja na maszynie docelowej wpływa na sposób analizowania argumentów i musimy mieć coś, co utrudnia użycie cudzysłowów lub ukośników, aby uciec od spacji, ale możemy użyć symboli wieloznacznych, więc zrobiłem to
Działa to dla mnie, ponieważ istnieje tylko jeden katalog, który zaczyna się od nazwy, gdybym miał wiele katalogów, to nie działałoby.
Ostatecznie muszę zrozumieć, jak skonfigurować serwer zdalny, aby mógł wydajniej analizować nazwę ścieżki - nigdy nie używam spacji w nazwach katalogów, ale osoba, która to skonfigurowała, zrobiła to i przynajmniej na razie utknąłem
źródło
W zależności od sytuacji szybką opcją jest utworzenie dowiązania symbolicznego w zdalnym systemie:
Następnie użyj
-L
flagi, wrsync
której nakazuje śledzenie zawartości katalogu:źródło
działa również podwójna ucieczka
źródło
Wypróbuj w ten sposób:
źródło