rsync란?

rsync란 컴퓨터 시스템 상에서 파일을 효율적으로 전송하고 동기화하기 위한 프로토콜이자 unix용 유틸리티의 하나로, 파일의 타임스탬프와 크기를 검사한다. 출발지와 목적지를 비교해, 다른 부분만 전송할 수 있다.

 

scp보다 빠르고, 변경된 파일들의 싱크를 맞춰줄 수 있어 대용량 파일을 전송하고 동기화할때 좋다.

 

회사에서 서버를 교체했는데, 그때 8TB의 파일을 전송해야 하는 일이 있었다.

이틀에 걸려 파일 및 디렉토리 구조를 미리 복사하고, 최종적으로 한번 더 수행해 sync를 맞췄다.

실제 rsync를 수행하기 전, --dry-run을 수행해 한 번 확인하는 과정을 거치길 바란다..

이 옵션 없었으면 배포일에 이틀걸렸던 복사과정을 한번 더 실행시킬 뻔 했다....

 

사용법

$ rsync [options] [source] [destination]

이때, source path에 trailing slash('/') 에 유의해야 한다.

  • / 가 없을 경우, destination 하위에 source 폴더가 생기게 된다.
  • / 가 있을 경우, source 폴더의 내용물만 destination으로 복사 된다.

 

옵션

옵션 설명
-v verbose, 자세한 정보 출력
-r 재귀적으로 하위 디렉터리 까지 복사(단 전송시 타임스탬프나 permission을 보존하지 않는다)
-l 심볼릭 링크 보존
-p 파일 퍼미션 보존
-t 타임스탬프 보존
-g 그룹 속성 보존
-o 소유자 속성 보존
-D Device 관련 파일과 특수 파일 (FIFO, Named Socket) 복사
-z 데이터를 압축해 전송
-h human-readable, output numbers in a human-readable format
-a archive mode. -rlptgoD 옵션을 적용한 것과 동일
-d source의 디렉터리 구조만 복사하고 안의 파일은 복사하지 않는다.
--progress 전송시 진행 내역 볼 수 있다.
--include/--exclude 포함/미포함 파일 설정
--delete source에 존재하지 않는 destination 안의 파일들을 삭제하는 옵션.
--dry-run rsync를 수행하기 전 전송할(또는 삭제할) 파일 목록을 확인할 수 있다.
--exclude
특정 파일이나 디렉토리를 제외할 수 있다. 반드시 상대경로로 설정해야 한다.
ex)
$ rsync --exclude 'A' # A 디렉토리 제외
$ rsync --exclude 'A/*' # A 디렉토리는 복사, A 하위 content는 제외
--exclude-from
--exclude 패턴을 여러개 적용하고 싶을 때 사용한다. 옵션을 주고, --exclude 하려는 디렉토리나 파일을 기재한 파일 경로로 설정한다.
마찬가지로, 파일의 내용은 상대경로 이다.
A, B 폴더를 목록에서 제외하려면 다음과 같이 txt 파일을 만들고,
ex) exclude-list.txt
A
B
--exclude-from 옵션을 부여한다.
ex)
$ rsync --exclude-from 'exclude-list.txt'
  • -avzh  옵션으로 가장 흔하게 사용함