rsync에서 파일을 제외하는 방법은 무엇입니까?


12

우분투 서버 12.04를 사용하고 있습니다. 이제 rsync를 사용하여 일부 파일을 백업하고 싶습니다.

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

당신이 볼 수 있듯이, 나는 백업 폴더에있는 모든 파일을 원하는 $ 홈 / 문서를 폴더로 $ HOME / 백업 / TEST를 하지만, 제외 폴더에있는 파일을 다른온도 . 그러나 rsync는 여전히 실패한 두 폴더 모두에서 파일을 복사했습니다.

ls $HOME/Backups/TEST/another
test

test 다른 폴더에있는 파일이며 rsync에서 파일을 제외해도 복사됩니다. 왜 그렇습니까? 해당 파일을 실제로 제외시키는 방법은 무엇입니까?

답변:


11

rsync 명령에는 몇 가지 문제가 있습니다 ( 필터 규칙에 대한 자세한 설명은 rsync 맨 페이지 참조 ).

  • --exclude주어진 패턴마다 명령이 필요합니다 .
  • 주어진 경로는 소스 경로를 기준으로해야합니다 (절대 경로 없음).
  • 소스와 대상을 지정하기 전에 옵션을 제공해야합니다.

예를 들어 다음 구문이 작동합니다.

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Exlude 패턴으로 끝나는 경우 /디렉토리를 나타냅니다. 둘 다 생략하면 해당 이름을 가진 파일과 디렉토리는 제외됩니다. *이름에 해당 문자열이있는 모든 파일 또는 디렉토리를 제외하려면 와일드 카드 로 바꾸십시오.


6
이것은 완전히 정확하지 않습니다. 어떻게 작동하는지 잘 모르겠지만 실험 을 통해 소스에서 --exclude=/foo디렉토리를 foo직접 --exclude=foo제외 하지만 하위 디렉토리에서도 foo라는 디렉토리는 제외합니다.
Sparhawk

10

.rsync-filter소스 디렉토리에 파일 을 추가 하고 -F옵션을 사용하는 것이 더 쉬울 수 있습니다 .

매뉴얼 페이지에서 :

-F : -F 옵션은이 규칙에 대한 속기 [...]입니다.

 --filter='dir-merge /.rsync-filter'

이것은 rsync에게 계층 구조를 통해 뿌려진 디렉토리 별 .rsync-filter 파일을 찾고 전송 규칙에서 파일을 필터링하도록 지시합니다.

예를 들면 다음과 같습니다. $ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

대신 -전체 단어를 쓸 수도 있습니다 exclude.

지금 당신은 할 수 있습니다

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.