2개의 코드 베이스를 동기화하고 싶습니다. 아래 명령은 다음과 같은 두 개의 디렉터리가 있는 사용 사례를 고려하지 않는다는 점을 제외하면 잘 작동합니다.시험다양한 위치에서:
- /시험/
- /테스트 시작/
$ rsync -avCz --delete-before --progress --exclude=test /tmp/codebase/ .
내가 하고 싶은 건 배제하는 거야/시험rsync의 디렉토리가 정확하지만 원합니다./테스트 시작rsync를 수행합니다.
정적 TXT 파일을 만들고 싶지는 않습니다. rsync에 매개변수로 전달해야 합니다. 그렇지 않으면 이것을 달성할 수 있는 방법이 있습니까? 누구랑 놀까- 포함하다VS- 제외그리고 후행 슬래시(--제외=테스트/) 예상대로 작동하지 않았습니다.
답변1
/
전송 루트에서만 리더를 사용하여 일치시킬 수 있습니다 . 이 시도:
rsync -avCz --delete-before --progress --exclude=/test/ /tmp/codebase/ .
이것은 주요 매뉴얼 페이지 스니펫입니다 /
.
패턴이 /로 시작하면 파일 계층의 특정 위치에 고정되고, 그렇지 않으면 경로 이름의 끝과 일치합니다. 이는 정규 표현식의 앞에 있는 ^와 유사합니다. 따라서 "/foo"는 "전송 루트"(전역 규칙의 경우) 또는 병합된 파일 디렉터리(디렉터리별 규칙의 경우)의 "foo" 이름과 일치합니다. 정규화되지 않은 "foo"는 알고리즘이 위에서 아래로 재귀적으로 적용되기 때문에 트리의 어느 위치에서든 "foo" 이름과 일치합니다. 마치 각 경로 구성 요소가 차례로 파일 이름 끝에 있는 것처럼 동작합니다. 고정되지 않은 "sub/foo"라도 "sub"라는 디렉터리에서 "foo"가 발견되는 계층 구조의 모든 지점과 일치합니다.
후행의 경우 /
:
패턴이 /로 끝나는 경우 일반 파일, 심볼릭 링크 또는 장치가 아닌 디렉터리만 일치합니다.
고쳐 쓰다
귀하의 의견을 보면 귀하도 이 --delete-excluded
옵션을 찾고 있는 것 같습니다.