저는 셸의 문자열 목록을 사용하여 rsync 명령을 수동으로 작성하여 일부 파일과 폴더를 복사해 왔습니다.
원격 파일 구조의 경우 예를 들면 다음과 같습니다.
/home/foo/
media/
bigfile.bin
somedir/
a.txt
b.json
나는 다음과 같이 쓸 것이다:
rsync -Pavz my_remote:/home/foo/{media/bigfile.bin,somedir} .
결과 로컬 파일 구조는 다음과 같습니다.
./bigfile.bin
./somedir/
a.txt
b.json
디렉토리 구조가 중요합니다. bigfile.bin
media/
로컬 디렉터리에는 없지만 somedir
재귀적으로 복사되었습니다. 이것이 내가 원하는거야.
이제 전송할 파일 목록을 작성하여 사용할 수 있는 스크립트가 생겼습니다.
rsync -Pavz --files-from=list.txt my_remote:/home/foo
list.txt
어디
media/bigfile.bin
somedir/
이제 결과 로컬 파일 구조는 다음과 같습니다.
./media/
bigfile.bin
./somedir/
a.txt
b.json
media
이제 원하지 않는 디렉토리가 생겼습니다 . 공통 기본 디렉토리가 이기 때문인 것 같습니다 my_remote:/home/foo
. 를 사용할 때 이전 동작을 복원할 수 있는 방법이 있습니까 --files-from
? 켜면 --no-R
모든 것이 순조롭게 진행되지만 실제로는 여전히 원합니다 somedir/
. 보다 일반적으로 원하는 동작은 "지정된 경로( bigfile.bin
, ) 의 기본 부분을 가져오고 대상 경로( )의 상위 디렉터리를 somedir
무시하고 해당 경로와 해당 내용을 반복적으로 복사하는 것 "입니다.media
스크립트를 사용하여 원래처럼 셸에서 확장되도록 중괄호를 사용하여 rsync 명령을 작성할 수도 있지만 아마도 원격 파일 이름에서 문자 이스케이프 문제를 처리해야 하므로 --files-from
.
답변1
당신이 찾고있는 것은 다음과 같습니다 ( rsync
버전 => 2.6.7).
포함하지 않으려는 경로 끝에 list.txt
점 슬래시를 추가하십시오 ../
media/./bigfile.bin
somedir/
이 경우 ./
해당 행의 경로는 무시됩니다 rsync
.media/
media/./bigfile.bin
매뉴얼 페이지에서
--relative, -R
...
It is also possible to limit the amount of path information that is
sent as implied directories for each path you specify. With a modern
rsync on the sending side (beginning with 2.6.7), you can insert a dot
and a slash into the source path, like this:
rsync -avR /foo/./bar/baz.c remote:/tmp/
방금 테스트했는데 제가 이해한 대로 작동하는 것 같습니다.