한 서버에서 다른 서버로 재 동기화하려고합니다. 서버의 디렉토리 구조는 동일하지만 공간이 있으면 원격 서버에서 원격의 경로 이름을 올바르게 인식하지 못하는 데 어려움이 있습니다.
자세한 내용은 다음과 같습니다
로컬 디렉토리는
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/ root@myserver.com:/mnt/xlses/split/v2/"name with space"
그것이 첫 번째로 실행되면 새로운 디렉토리를 생성한다는 것입니다.
나는 그것을 중단하고 새로운 디렉토리가 있음을 본다.
mnt/xlses/split/v2/name
모든 파일이 해당 디렉토리에 있습니다.
나는 그들이있을 것으로 기대했다
mnt/xlses/split/v2/name with space
답변
시험
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space root@myserver.com:/mnt/xlses/split/v2/
/
소스 디렉토리 경로에서 슬래시를 제거했습니다. 그러면 rsync
디렉토리와 그 내용이 모두 복사되므로 rsync
원격 호스트에서 이름을 올바르게 입력하지 않아도됩니다.
답변
시험
rsync --protect-args --size-only -avzPe ssh "/mnt/xlses/split/v2/name with space/ "root@myserver.com:/mnt/xlses/split/v2/name with space"
보낸 사람 man rsync
:
-s, –protect-args
이 옵션은 모든 파일 이름과 대부분의 옵션을 원격 쉘이 해석하지 않고 원격 rsync로 보냅니다. 즉, 공백은 이름으로 분할되지 않으며 와일드 카드가 아닌 특수 문자는 변환되지 않습니다 (예 : ~, $,;, & 등). 와일드 카드는 쉘 대신 rsync에 의해 원격 호스트에서 확장됩니다. […]
답변
이것은 bash에서 작동합니다 : 백 슬래시로 공백을 탈출 한 다음 따옴표를 사용하십시오.
rsync -avuz me@some.server.com:"/media/Music/Heavy\ Metal/Witch\ Mountain/*" .
또는 변수 $ remote_path에 경로가 있으면 공백을 대체하여 이스케이프 할 수 있습니다.
rsync -avuz me@some.server.com:"${remote_path// /\\ }" .
답변
두 쌍의 따옴표를 사용하십시오
모든 백 슬래시를 신경 쓰지 말고 큰 따옴표 안에 작은 따옴표를 사용하십시오 .
ssh me@myserver.com:"'/home/me/test file'" .
작은 따옴표 안에 큰 따옴표를 역순으로 사용할 수도 있습니다 .
ssh me@myserver.com:'"/home/me/test file"' .
추가 정보
서버 측 와일드 카드
당신이 원하는 경우 *
서버가 아닌 클라이언트에서 해석의는 *
내부 따옴표의 이쌍 하나를 제공해야합니다. 논리적으로 외부 따옴표 쌍이 클라이언트 해석을 이스케이프하고 내부 따옴표 쌍이 서버 해석을 이스케이프하기 때문에이 반 직관적 인 것을 알 수 있습니다.
Args 보호
장점은 비교 --protect-args
솔루션 , 실제로의 제한이 없다는 것입니다 --protect-args
, 그래서 당신과 같은 특수 문자를 사용할 수 있습니다 ~
또는$
. 그래서 당신은 쓸 수 있습니다 :
rsync host:'"$HOME/test file"' .
또는
rsync host:'~"/test file"' .
~
후자의 예제에서 물결표 ( ) 는 큰 따옴표 외부에 있어야합니다.
(예를 파일 부분 : 당신은 전체 사용자 이름 @ 호스트 따옴표 쌍 중 하나를 넣을 수 있습니다 ssh "me@myserver.com:'/home/me/test file'" .
)
답변
나는 이것이 오래된 질문이라는 것을 알고 있지만 기존 지식에 추가 할 것이라고 생각했습니다.
rsync
공간이있는 여러 폴더와 함께 사용 했으며 이것이 작동합니다. 다음과 같이 1-10 사이의 폴더 번호가 있습니다.
The\ Folder1
The\ Folder2
The\ Folder3
- ..
The\ Folder10
사용하려는 두 인스턴스 rsync
는 로컬 및 원격입니다.
-
로컬 -따옴표가 없습니다.
rsync -avu /media/data/The\ Folder* .
-
원격 -따옴표가 있음에 유의하십시오.
rsync -avu -e ssh you@domain.com:"/media/data/The\ Folder*" .
답변
일반적으로 말하면 인수를 인용하고 인수에서 공백 문자를 이스케이프 처리하십시오. 제시 한 예에서 다음을 시도하십시오.
rsync --size-only -avzPe ssh "/mnt/xlses/split/v2/name\ with\ space/" "root@myserver.com:/mnt/xlses/split/v2/name\ with\ space"
답변
로부터 rsync
맨 :
If you need to transfer a filename that contains whitespace, you can
either specify the --protect-args (-s) option, or you'll need to escape
the whitespace in a way that the remote shell will understand. For
instance:
rsync -av host:'file\ name\ with\ spaces' /dest