rsync의 include / exclude 패턴 이해


7

패턴을 사용하여 원격 시스템에서 N 개의 파일을 전송하려고합니다.

ssh remote ls target/
2013-08-01.mjson.gz
2014-07-04.mjson.gz
2014-07-09.mjson.gz
2014-08-12.mjson.gz
...

나는 단지 2014-07* 파일. 지금까지 내 시도 :

rsync -a --dry-run --verbose --include="2014-07-*" remote:target .
# transfers everything

rsync -a --dry-run --verbose --include="2014-07-*" --exclude="*" remote:target .
# transfers nothing

rsync -a --dry-run --verbose --exclude="*" --include="2014-07-*" remote:target .
# transfers nothing

rsync -a --dry-run --verbose --include="*/2014-07-*" --exclude="*" remote:target .
# transfers nothing

rsync -a --dry-run --verbose --include="***/2014-07-*" --exclude="*" remote:target .
# transfers nothing

나는 내가 원하는 파일을 나타 내기 위해 --files-from을 사용할 수 있다는 것을 알고 있지만,해야 할 고통이있다.

나는 내가 원하는 것을 include / exclude를 올바르게 사용하는 방법을 결코 이해하지 못했다. man 페이지는 다음과 같이 말합니다 :

첫 번째 일치 패턴이 적용됩니다. 제외 패턴 인 경우 해당 파일은 건너 뜁니다. include 패턴 인 경우 해당 파일 이름은 건너 뛰지 않습니다. 일치하는 패턴이 없으면 파일 이름은 건너 뛰지 않습니다.

이것을 읽으면, include가 첫 번째이고 파일 이름이 일치하면 "파일 이름을 건너 뛰지 않습니다."라는 부분이 추정됩니다. 분명히, 나는 틀렸어.

맨 페이지의 아래쪽에 다음과 같이 표시됩니다.

-recursive (-r) 옵션 (-a가 암시 함)을 사용할 때 모든 경로의 모든 하위 구성 요소는 위에서 아래로 방문하므로 include / exclude 패턴은 각 하위 구성 요소의 전체 이름에 반복적으로 적용됩니다

내가 사용한 이후로 --recursive, 그 원인 . 전역 제외 때문에 건너 뛸 수 있습니까?

포함 및 제외 패턴을 사용하여 파일의 하위 세트를 전송하려면 어떻게해야합니까?

답변:


7

include 및 exclude를 사용할 수 있지만이 방법이 더 간단한 해결책이라고 생각합니다.

rsync -a --dry-run --verbose remote:'target/2014-07*' .

포함 / 제외 변형이 작동하지 않는 이유는 rsync가 절대로 target 디렉토리에서 제외되므로 * 패턴과 일치하지 않는 포함 패턴 ( target, 아니라 target 그 자체). 포함 / 제외가 작동하려면 다음과 같이해야합니다.

rsync -a --dry-run --verbose --include=target --include='target/2014-07-*' --exclude='*' remote:target .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.