rsync에 중첩 디렉터리가 포함되지 않는 이유는 무엇입니까?

rsync에 중첩 디렉터리가 포함되지 않는 이유는 무엇입니까?

다음과 같은 디렉토리 구조를 고려하면:

$ cd /home/user/test/
$ mkdir -p source/b/c/
$ touch source/b/c/d.txt
$ tree source/
source/
└── [4.0K]  b
    └── [4.0K]  c
        └── [   0]  d.txt

이 명령이 예상대로 폴더를 복사하는 이유는 다음과 같습니다.

$ pwd
/home/user/test/
$ rsync -av -n --include="b/***" --exclude="*" source/ target
sending incremental file list
created directory target
./
b/
b/c/
b/c/d.txt

sent 141 bytes  received 59 bytes  400.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

하지만 그게 효과가 없나요?

$ pwd
/home/user/test/
$ rsync -av -n --include="b/c/***" --exclude="*" source/ target
sending incremental file list
./

sent 59 bytes  received 19 bytes  156.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

내가 우연히 발견한 방법: 전체 디렉터리 구조를 유지하면서 여러 개의 변경 가능한 중첩 디렉터리를 동기화하려고 했습니다.

더 구체적인 포함 규칙이 어떤 것과도 일치하지 않는 이유는 무엇입니까?

답변1

첫 번째 예

rsync -av -n --include="b/***" --exclude="*" source/ target
  • 디렉토리 b와 그 아래의 모든 항목을 포함합니다.
  • 모든 것을 제외하다(기타)

그래서 b그 아이들이 백업됐어

두 번째 예

rsync -av -n --include="b/c/***" --exclude="*" source/ target
  • 목차 b/c와 아래의 모든 내용을 포함합니다.c
  • 모든 것을 제외하다(기타)

여기서 문제는 포함하지 않아서 찾을 수 없다는 b것 입니다 . 해결책은 다음을 명시적으로 포함하는 것입니다.rsyncb/cb

rsync -av -n --include='b/' --include="b/c/***" --exclude="*" source/ target
  • 디렉토리 포함b
  • 목차 b/c와 아래의 모든 내용을 포함합니다.c
  • 모든 것을 제외하다(기타)

관련 정보