특정 파일 형식(예: .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='*/'