한 서버에서 다른 서버로 동기화하려고 합니다. 서버의 디렉토리 구조는 동일하지만 공백이 있으면 원격 서버의 경로 이름을 올바르게 식별할 수 없습니다.
자세한 내용은 다음과 같습니다.
로컬 디렉토리는
mnt/xlses/split/v2/name with space
원격 디렉토리는
mnt/xlses/split/v2/name with space
내가 찾을 수 있는 모든 것을 시도했으며 최근 시도는 다음과 같습니다.
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ [email protected]:/mnt/xlses/split/v2/"name with space"
실행될 때 가장 먼저 보고되는 것은 새 디렉터리를 생성한다는 것입니다.
나는 그것을 중단하고 새로운 디렉토리가 있다는 것을 알았습니다
mnt/xlses/split/v2/name
내 모든 파일은 해당 디렉토리에 있습니다
나는 그들이 거기 있을 것이라고 생각했다
mnt/xlses/split/v2/name with space
답변1
노력하다
rsync -s --size-only -avzPe ssh "/mnt/xlses/split/v2/name with space/" "[email protected]:/mnt/xlses/split/v2/name with space"
man rsync
(2023년 업데이트) 부터 :
--secluded-args
,-s
이 옵션은 프로토콜을 통해(원격 셸 명령줄 대신) 모든 파일 이름과 대부분의 옵션을 원격 rsync로 보내 원격 셸이 이를 수정하는 것을 방지합니다. 와일드카드는 셸이 아닌 원격 호스트에서 rsync에 의해 확장됩니다.
[...]
--protect-args
이 옵션은 (3.2.6 이전) 호출되었으며 여전히 이전 이름을 사용할 수 있습니다(비록 지정하는 것이-s
항상 가장 쉽고 호환성이 가장 높은 옵션임).
답변2
이는 bash에서 작동합니다. 백슬래시로 공백을 이스케이프 처리한 다음 따옴표를 사용합니다.
rsync -avuz [email protected]:"/media/Music/Heavy\ Metal/Witch\ Mountain/*" .
또는 $remote_path 변수에 경로가 있는 경우 다음을 바꾸어 공백을 이스케이프할 수 있습니다.
rsync -avuz [email protected]:"${remote_path// /\\ }" .
답변3
두 쌍의 따옴표를 사용하세요.
모든 백슬래시를 무시하고 그냥 사용하세요.큰따옴표 안의 작은따옴표:
ssh [email protected]:"'/home/me/test file'" .
(권장)은 반대로 사용될 수도 있습니다.작은따옴표 안에 큰따옴표가 있습니다.:
ssh [email protected]:'"/home/me/test file"' .
두 번째 방법은 서버에서 와일드카드를 사용할 수 있기 때문에 더 좋습니다(작은따옴표는 클라이언트에서 확장되지 않기 때문입니다). 동일한 접두사를 가진 여러 파일을 재동기화하는 동안 이 작업을 수행하고 있습니다.
추가 정보
서버측 와일드카드
*
클라이언트가 아닌 서버에서 a를 해석 하려면 *
두 쌍의 따옴표 중 하나만 안에 표시되어야 합니다. 논리적으로 바깥쪽 쌍의 따옴표는 클라이언트 해석을 벗어나고 안쪽 쌍은 서버 해석을 벗어나기 때문에 이것이 직관에 어긋난다고 생각합니다.
보호 매개변수
그에 비해 장점은--protect-args
해결책즉, 실제로는 이 제한이 --protect-args
없으므로~
또는 등의 특수 문자를 사용할 수 있습니다.$
. 따라서 다음과 같이 작성할 수 있습니다.
rsync host:'"$HOME/test file"' .
또는
rsync host:'~"/test file"' .
후자의 예에서 물결표( ~
) 는 다음과 같아야 합니다.외부큰따옴표.
전체 username@host:file 부분에 따옴표 쌍을 넣을 수 있습니다(예:)ssh "[email protected]:'/home/me/test file'" .
답변4
나는 이것이 오래된 질문이라는 것을 알고 있지만 기존 지식에 추가하고 싶다고 생각했습니다.
공백이 있는 여러 폴더를 사용했는데 rsync
이것이 작동합니다. 다음과 같이 1-10번 폴더가 있습니다.
The\ Folder1
The\ Folder2
The\ Folder3
- ..
The\ Folder10
사용하려는 2개의 인스턴스는 rsync
로컬 인스턴스와 원격 인스턴스입니다.
현지의- 누락된 따옴표를 참고하세요.
rsync -avu /media/data/The\ Folder* .
외딴- 따옴표가 있는지 확인하세요.
rsync -avu -e ssh [email protected]:"/media/data/The\ Folder*" .