DevSecOps/etc
rsync 기본 사용법과 주요 옵션 정리
봉의일상
2025. 3. 2. 21:53
1. rsync란?
rsync는 파일 및 디렉터리를 효율적으로 동기화하는 강력한 도구입니다.
파일의 변경된 부분만 전송하는 차등 전송(differential transfer) 방식을 사용하여 네트워크 대역폭을 절약하고 빠르게 동기화할 수 있습니다.
2. rsync 기본 사용법
rsync의 기본적인 실행 형식은 다음과 같습니다.
rsync [옵션] 원본 경로 대상 경로
예를 들어, 로컬 디렉터리를 다른 위치로 복사할 때:
rsync -av /home/user/data /backup/
또는 원격 서버에 전송할 때:
rsync -av /home/user/data user@remote:/backup/
3. rsync 주요 옵션 정리
1) 파일 속성을 유지하는 -a (아카이브 모드)
rsync -a source/ destination/
- 디렉터리 구조, 심볼릭 링크, 권한, 타임스탬프 등을 유지하며 동기화
- cp -r보다 강력한 파일 복사 기능 제공
2) 전송 진행 상황을 출력하는 -v (verbose)
rsync -av source/ destination/
- 전송 중인 파일 목록과 진행 사항을 출력
- 로그 기록용으로 유용
3) 파일 크기를 줄이기 위한 -z (압축)
rsync -az source/ destination/
- 전송 시 파일을 압축하여 속도를 향상
- 네트워크 속도를 절약하는 데 효과적
4) 삭제 동기화: --delete
rsync -av --delete source/ destination/
- 원본에서 삭제된 파일을 대상에서도 삭제하여 정확한 복제 유지
- 주의: 잘못 사용하면 데이터 손실 가능성이 있음
5) 파일 비교 기준 변경: -u (업데이트된 파일만 복사)
rsync -avu source/ destination/
- 대상 파일이 이미 최신 버전이라면 덮어쓰지 않음
- 불필요한 덮어쓰기 방지로 성능 최적화 가능
6) 부분적으로 전송된 파일 유지: --partial
rsync -av --partial source/ destination/
- 전송 중 중단된 파일을 다시 이어서 복사할 수 있도록 보존
- 대용량 파일 전송 시 유용
7) 전송 속도 제한: --bwlimit=KBPS
rsync -av --bwlimit=5000 source/ destination/
- 초당 전송 속도를 제한하여 네트워크 부담 완화
- 원격 서버가 트래픽 제한이 있는 경우 유용
8) SSH를 통한 원격 전송: -e ssh
rsync -av -e ssh source/ user@remote:/destination/
- SSH 프로토콜을 사용하여 보안이 강화된 파일 전송
- SSH 기본 포트가 아닌 경우:
- rsync -av -e "ssh -p 2222" source/ user@remote:/destination/
9) 특정 파일 제외: --exclude
rsync -av --exclude="*.log" source/ destination/
- 특정 패턴의 파일을 동기화에서 제외
- 여러 개 제외 가능:
- rsync -av --exclude={"*.log","temp/"} source/ destination/
10) 동기화 중 변경된 파일 제외: --ignore-existing
rsync -av --ignore-existing source/ destination/
- 대상 폴더에 이미 존재하는 파일은 건너뜀
4. rsync 실전 예제
✅ 로컬 폴더를 원격 서버로 백업
rsync -azv --delete /home/user/data user@remote:/backup/
- 압축(-z), 아카이브(-a), 자세한 로그(-v) 활성화
- 원본에서 삭제된 파일을 대상에서도 삭제(--delete)
✅ 여러 개의 폴더를 동기화하면서 특정 파일 제외
rsync -av --exclude={"*.log","node_modules/"} /project/ /backup/
- .log 파일과 node_modules/ 디렉터리는 제외하고 복사
✅ 대역폭 제한을 걸고, 중단된 파일 이어서 복사
rsync -av --bwlimit=2000 --partial source/ destination/
- 초당 2MB로 속도를 제한하고(--bwlimit=2000), 부분 전송 지원(--partial)