Linux

[Linux] rsync - 특정 디렉터리 제외하고 복사

비번변경 2023. 7. 26. 19:47

개요

데이터 복사를 해야 하는데 저장 공간이 조금 부족해서 불필요한 경로는 제외하고 복사하려고 한다.

방법을 적어둔다.

 

 

rsync

rsync 명령은 cp와 비슷한 파일 복사 도구로, 서로 다른 두 개의 시스템 간에 파일과 디렉터리를 동기화하기 위해 사용한다. 즉, 파일의 타임스탬프와 크기를 검사하여 변경이 발생한 파일만 복사한다. 또 로컬 복사도 할 수 있지만 SSH를 통한 원격 복사도 할 수 있다. 즉, scp처럼 사용할 수도 있다.

rsync [OPTION...] SRC... [DEST]

소스 경로만 지정하는 경우, 파일을 나열한다.

 

 

특정 디렉터리 제외하고 복사

복사에서 특정 디렉터리를 제외하고 싶을 때는 다음과 같이 사용한다.

rsync -avz --exclude <제외 경로> SRC DEST
# -a : 아카이브 모드. -rlptgoD 옵션으로 실행한 것과 동일하다.
# -v, --verbose: 세부 정보 출력
# -z, --compress : 전송 시 파일 데이터 압축
# -r, --recursive : 하위 경로까지 복사
# -l, --links : 심볼릭 링크 유지
# -p, --perms : 권한 유지
# -t, --times : 타임스탬프 보존
# -g, --group : 그룹 유지
# -o, --owner : 소유자 유지
# -D : --devices --specials과 동일. device, special 파일 보존
# --exclude : 패턴에 일치한 파일 제외

 

예시 )

계정의 홈 디렉터리를 /test 라는 경로 아래로 복사해 본다. 현재 홈 디렉터리 상태는 아래와 같은데 .theia라는 경로는 제외하고 복사한다.

현재 /test 경로는 비어 있는 상태에서 rsync를 수행해본다.

rsync -avz --exclude .theia /root/ /test

/test 경로를 확인해 보면 exclude한 .theia 경로는 복사되지 않은 것을 확인할 수 있다. 

 

 

+ ❗

rsync는 소스를 /path/SRC로 지정하냐, /path/SRC/로 지정하냐에 따라 동작이 다르다.
/갸 존재하면 /path/SRC/ 내의 파일이 DEST 아래로 복사된다.
/가 존재하지 않으면 DEST 아래에 SRC 경로를 생성하고, 생성한 경로로 파일을 복사한다.

때문에 아래의 두 개 명령은 같은 동작을 수행한다.

$ rsync -azvh /var/lib/mysql /home/backups
$ rsync -azvh /var/lib/mysql/ /home/backups/mysql

 

 

참고 문서

https://linux.die.net/man/1/rsync

https://ko.wikipedia.org/wiki/Rsync

https://www.lesstif.com/system-admin/rsync-data-backup-12943658.html