특정 디렉토리 트리의 특정 파일 유형만 포함하는 필터를 사용한 rsync

특정 디렉토리 트리의 특정 파일 유형만 포함하는 필터를 사용한 rsync

내 rsync 명령은 다음과 같습니다.

rsync --update -rav --filter="merge $HOME/mergefilter.txt" ~/ (remote_destination):~/

내 mergefilter.txt 파일은 다음과 같습니다.

+ /directory_1/***
+ /directory_2/***
+ /directory_etc/***
- /**

명령 은 rsync제대로 작동하며 지정된 디렉터리 트리의 모든 항목을 업데이트합니다. 그러나 나는 그것에 몇 가지 세부 사항을 추가하고 싶습니다. 필요한 구문이 확실하지 않지만 내 디렉토리 트리 중 하나에 대해 특정 파일만 포함하고 싶습니다. 예를 들어, mergefilter.txt가 다음과 같이 작동한다고 상상해 보세요.

+ /directory_1/***
+ /directory_2/*** --include="*.c++" --include="*.h" 
+ /directory_etc/***
- /**

이런 방식으로 Directory_2 디렉터리 트리(및 해당 하위 디렉터리)를 동기화할 때 .c++ 및 .h 파일만 업데이트됩니다.

비슷한 질문을 하는 다른 스택 교환 페이지를 살펴봤지만 include필터 파일을 사용할 때 이를 수행하는 방법을 보여주는 페이지는 없습니다. 여기서 올바른 구문은 무엇입니까?

답변1

이미 사용하고 있습니다 include. 로 시작하는 모든 줄 +은 포함 규칙 -입니다.

디렉토리에 특정 파일만 포함하려면 안타깝게도 철자를 입력해야 합니다. 필터 파일은 다음과 같습니다.

+ /dir_1/***
+ /dir_2/
+ /dir_2/**.c++
+ /dir_2/**.h
+ /dir_2/**/
- /dir_2/**
+ /dir_etc/***
- /*

dir_2먼저 다음을 포함하는지 확인해야 합니다 + /dir_2/.

*.c++다음으로, 그 안에 모든 *.h파일을 포함하게 됩니다 . 슬래시를 포함한 모든 문자를 일치시켜야 한다는 것을 dir_2기억하세요 .**

dir_2다음으로, 모든 디렉터리를 : 에 포함해야 합니다 + /dir_2/**/. 그렇지 않으면 해당 하위 디렉터리가 제외되기 때문에 하위 디렉터리의 파일을 찾을 수 없습니다.

마지막으로 다른 모든 파일을 제외합니다.

디렉터리별로 병합 파일을 사용할 수도 있으므로 rsync는 각 디렉터리에서 지정된 파일 이름을 확인하고, 발견되면 해당 파일을 해당 디렉터리에 대한 추가 필터로 사용합니다. -F옵션은 맨페이지를 참조하세요 .

관련 정보