rsync로 여러 디렉토리를 제외하는 방법은 무엇입니까?


184

rsync를 사용하여 홈 디렉토리를 백업하려고하는데 정크가 포함 된 디렉토리 중 일부를 제외하고 싶습니다. 특별히 제외 /home/ben/.ccache하고 싶습니다 /home/ben/build. 불행히도 rsync에 대한 설명서는 정보 과부하이며 내 질문에 대답하지 못했습니다. 이것이 내가 시도한 것입니다.

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

이것을하는 올바른 방법은 무엇입니까?


4
그냥 국기가 이미 a암시 한다고 말하고 싶었습니다 r:)-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Populus

답변:


238

알았어 정말 바보 같아 이 질문을 게시하기 전에 친구가 어떻게해야하는지 보여 주었고 정말 간단합니다. 여러 디렉토리를 제외하려면 여러 --exclude=path스위치를 사용하면 됩니다. 위의 올바르게 작성된 명령은 다음과 같습니다.

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

7
절대 경로는 나를 위해 작동 하지 않았지만 (지정된 디렉토리는 자동으로 제외되지 않았습니다) 반면, 소스 디렉토리와 관련된 경로는 올바르게 작동했습니다. 어쩌면 내가 누락 된 것이 있지만 절대 경로가 항상 작동한다는 @FreeSoftwareServers의 주장에 대해 신중할 것입니다.
Soren Bjornstad

5
참고 :이 옵션이 -a포함되어 -r있으므로 -ar중복입니다.
David

4
FreeSoftwareServers가 생각하는 것과 달리 제외 경로는 소스 경로, NOT /에 상대적입니다. 따라서 해당 의견은 범주 적으로 허위이므로 귀하가 해당 의견을 따를 경우 실패로 이어질 것입니다. 최선의 전략은 이러한 유형의 정신적 오류를 피하기 위해 제외 할 때 / 선행을 생략하는 것입니다. 소스가 / home / me이고 == // dir / '을 제외하면 / home / me의 mydir 디렉토리가 제외됩니다. 즉, / home / me / mydir NOT / mydir / at /는 제외됩니다. 불행히도 그 의견은 기술적으로 잘못되어 오해의 소지가 있으므로 해당 의견을 공감하거나 편집 할 수 없습니다.
Lizardx

3
나중에 여행자를위한 참고로, @FreeSoftwareServer에 의해 해당 의견이 제거 된 것처럼 보입니다. tl; dr : 상대 경로 사용
Freedom_Ben

2
당신이 바보라면 나도 179 명의 다른 지지자들도 마찬가지입니다!
Sridhar Sarnobat

108

제외 할 디렉토리 및 / 또는 파일이 여러 개인 경우 텍스트 파일을 만들고 --exclude-from스위치를 사용하십시오 . 파일을 만들어 그 exclude_me.txt안에 제외를 나열하십시오. 예 ( /home/ben/exclude_me.txt) :

.ccache
build
.java
.gvfs
.xsession-errors

그런 다음 rsync는 다음과 같습니다.

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

다음은 도움이 될 수있는 필터 규칙에 대한 정보입니다.

  • /dir/ 루트 폴더를 제외한다는 의미 /dir
  • /dir/*루트 폴더를 가져 /dir오지만 내용 은 얻지 못합니다.
  • dir/ 이름에 포함 된 모든 폴더를 제외 함을 의미합니다. dir/

  • 제외 된 예 : 폴더 내에서 /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cf시작하는 파일을 건너 뜁니다 .cf/var/spool/lpd

매뉴얼 페이지 의 필터 규칙 섹션 도 참조 하십시오.


4
이 점에 유의하는 것이 중요 루트 폴더 수단 전송의 루트 가 아닌 루트 디렉토리를.
jamesdlin

이것은 훌륭한 답변입니다!
Alexander Zhukov

85

중괄호 내에서 여러 경로를 제외 할 수도 있습니다.

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

40
이것은 내가 "어려운 방법"발견 만 배쉬에서, 그냥 쉬에서, 잘 작동
XOR을

7
쉼표 뒤에 공백이 없습니다. 어려운 길도 😭
styl3r

--exclude = '. gvfs'와 같은 ''를 사용하지 마십시오
Martin T.

FWIW, 나는 중괄호가 ksh와 함께 작동한다고 생각합니다. 다른 쉘의 경우 다음과 같은 것을 사용할 수 있습니다 IFS=$'\n'; rsync -arv $(printf '.ccache\nbuild\n' | sed 's/^/--exclude=/g') /home/ben /media/ben/thumbdrive/. 또는 --exclude수동으로 입력해야하는 여러 인수를 사용할 수도 있습니다.
TSJNachos117

1
이것이 작동하는 이유는 누군가 세부 사항을보고 싶을 때 "브레이스 확장"때문입니다.
shredalert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.