다음과 같은 디렉토리 구조를 고려하면:
$ 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
것 입니다 . 해결책은 다음을 명시적으로 포함하는 것입니다.rsync
b/c
b
rsync -av -n --include='b/' --include="b/c/***" --exclude="*" source/ target
- 디렉토리 포함
b
- 목차
b/c
와 아래의 모든 내용을 포함합니다.c
- 모든 것을 제외하다(기타)