rsync : –include-from(exclude-from) 사용법 두번째.

이전 에도 있긴 한데, 조금 더 심화할 필요가 있다.

man rsync 에서 INCLUDE/EXCLUDE PATTERN RULES 를 참고하여 이 글을 작성했다.


거기 내용을 그대로 옮겨보자면.. include-from 에 다음과 같은 파일을 적용했다고 가정한다.

+ /some/path/this-file-will-not-be-found
+ /file-is-included
- *

이 결과 + 로 설정한 두 파일만 선택이 되고 나머지는 모두 없는 걸로 치게 될까?
이게, 그렇질 않다. 문득, tar 에서도 같은 방식을 쓰는게 아닐까? 하는 섬광같은 짐작이 스쳐갔다. (이건 나중에 알아보기로 하고..)
다시 본론으로 돌아가면, 맨 아랫줄에 있는 - * 에 의해 위 두 디렉토리는 아예 방문조차 하지 않게 된다고 한다. 왜 이런 현상이 나는건지.. (그냥 그렇다고 이해하는 수 밖에)

따라서, Include 를 쓰려면, 두가지를 명시해줘야 한다.

  • 첫째, 모든 디렉토리를 검색(?) 경로에 넣어준다. 이게 + */ 이다. 맨 끝에 있는 / 는, 디렉토리만을 검색한다는 의미라고 한다.
  • 둘째, include 파일을 제외한 모든 파일은 제외함을 알린다. - * 면 충분하다. 이 표시는 + */ 보다 앞에 나와야 한다.

따라서, 위 내용을 정리하자면 이렇게 된다.

+ */
+ /some/path/this-file-will-not-be-found
+ /file-is-included
- *

저 명령을 우리말(?)로 옮겨보면,

  • 모든 디렉토리를 대상으로 작업하되
  • /some/path/this-file-will-not-be-found 도 포함하고
  • /file-is-included 까지 넣어주고 난 뒤
  • 나머지 모든 파일(- *)은 제외하라

이렇게 된다.
외부 파일을 쓰지는 않았지만, 위 내용이 Stack Overflow 등등에서도 이미 다뤄졌었다. (왜 아니었겠어.)

exclude 는 좀 다른데, 어차피 rsync src/* dest 라고 명령을 내렸을 때 src 밑의 모든 파일이 포함이 되고, 또 배제할 파일(exclude)도 그 디렉토리에 있으므로, 그냥 - Pattern 형식으로 Exclude 파일목록을 만들어주면 된다. (물론 확신은 없는데, 이렇게 작업해서 성공은 했다.)

이게 정말 맞는 내용일지.
man page 에 있는 내용을 이해했다고 생각은 하는데, 글쎄.. 또 뭔가 나혼자 착각에 빠져 있는 건 아닌지..?

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.