Rsync, 일부 디렉토리를 제외한 특정 파일 유형 만 포함


14

특정 파일 형식 (예 :) 만 재 동기화 .py하고 일부 디렉토리 (예 :)에서 파일을 제외하고 싶습니다 venv.

이것이 내가 시도한 것입니다.

rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

그러나 작동하지 않습니다.

내가 무엇을 놓치고 있습니까?

나는 또한 이 질문에 대한 답변을 따랐 지만 도움이되지 않았습니다.


왜 초기가 필요 --include='*/'합니까?
Charlie Parker

1
한 가지 유형의 파일 만 보내려는 재귀 디렉토리가있는 경우 어떻게 명령을 작성합니까? 그것은 아마도 모든 것을 배제한 마지막 배제 때문에 아마도 목표 디렉토리를 위해서만하는 것 같습니다
Charlie Parker

답변:


17

venv/포함 되기 전에 제외해야합니다 */:

rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

미묘한 점은 rsync규칙을 순서대로 처리하고 첫 번째 일치 규칙이 승리한다는 것입니다. 따라서 --include='*/'is is before 인 경우 --exclude='venv/'디렉토리 venv/가 포함되며 --include='*/'제외 규칙은 참조되지 않습니다.

이것을 단순화 할 수 있습니까?

우리는 왜 필요합니까 --include='*/'--exclude='*'? 왜 --exclude=venv/ --include='*.py'충분 하지 않습니까?

기본값은 파일 / 디렉토리를 포함하는 것입니다. 따라서 다음을 고려하십시오.

rsync -avz --exclude='venv/' --include='*.py' source target

여기에는 파일 또는 디렉토리를 제외한 모든 것이 포함됩니다 venv/. 그러나 .py파일 만 원합니다 . 즉,로 다른 파일을 명시 적으로 제외해야합니다 --exclude='*'.

--exclude='*'파일과 디렉토리를 모두 제외 합니다 . 따라서을 지정 --exclude='*'하면 모든 디렉토리가 제외되고 .py루트 디렉토리 의 파일 만 찾을 수 있습니다. 제외 된 디렉토리를 .py찾지 않으므로 하위 디렉토리의 파일을 찾을 rsync수 없습니다. 따라서 우리가 가지고 있다면 --exclude='*', --include='*/'모든 디렉토리의 내용이 탐색되도록하기 위해 앞에 와야한다 .


큰! 감사! 그냥 내 이해를 위해, 우리는 왜 필요합니까 --include='*/'--exclude='*'? 왜 --exclude=venv/ --include='*.py'작동하지 않습니까?
CentAu

1
@CentAu 방금 토론에 대한 답변을 업데이트했습니다.
John1024

한 가지 유형의 파일 만 보내려는 재귀 디렉토리가있는 경우 어떻게 명령을 작성합니까? 아마도 모든 것을 제외하는 마지막 제외 때문에 대상 디렉토리에 대해서만 수행하는 것 같습니다.
Charlie Parker

1
북마크! 특히 미묘함. 플래그 순서가 중요한 다른 CLI 유틸리티는 생각할 수 없습니다 !
antortjim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.