rsync 파일 소스 및 디렉토리 구조

rsync 파일 소스 및 디렉토리 구조

저는 셸의 문자열 목록을 사용하여 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.binmedia/로컬 디렉터리에는 없지만 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/

방금 테스트했는데 제가 이해한 대로 작동하는 것 같습니다.

관련 정보