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='*/'
합니까?