Rsync, 특정 디렉토리를 제외한 특정 파일 형식만

Rsync, 특정 디렉토리를 제외한 특정 파일 형식만

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

내가 시도한 것은 다음과 같습니다.

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

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

내가 무엇을 놓치고 있나요?

나도 그 대답을 따랐다.이 문제그러나 이것은 도움이 되지 않습니다.

답변1

venv/제외해야 함앞으로 */이미 포함됨:

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

미묘한 점은 rsync규칙이 순서대로 처리되어 첫 번째 일치 규칙이 승리한다는 것입니다. 따라서 --include='*/'이전인 경우 --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='*/'

관련 정보