본문 바로가기
C.W.K.
Stream
Lesson 03 of 08 · published

rsync: 똑똑한 파일 동기화

~13 min · rsync, sync, backup

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

변경된 파일만 옮기는 복사 도구

rsync는 로컬과 원격 경로 사이에서 달라진 파일만 전송해. 권한과 시각, 심볼릭 링크를 보존할 수 있고 중단된 전송을 이어 갈 수 있어 반복 백업과 배포에 잘 맞아.

자주 쓰는 플래그 묶음

rsync -avzP src/ dest/

  • -a: 재귀, 권한, 시각, 심볼릭 링크를 보존하는 archive 모드야.
  • -v: 처리하는 파일을 보여 줘.
  • -z: 네트워크 전송 중 압축해.
  • -P: 부분 파일을 남기고 파일별 진행률을 보여 줘.

소스 끝의 슬래시가 복사 단위를 바꿔

  • rsync -av src/ dest/: src 안의 내용을 dest에 넣어.
  • rsync -av src dest/: src 디렉터리 자체를 복사해 dest/src/를 만들어.

원격 경로에서는 한 단계 중첩 차이가 큰 사고가 될 수 있으니 작은 샌드박스에서 먼저 확인해.

추가로 알아둘 옵션

  • --delete: 소스에 없는 대상 파일을 지워. 확인된 미러에만 써.
  • --exclude='node_modules' --exclude='.git': 패턴을 제외해.
  • --exclude-from=.rsyncignore: 파일에서 제외 규칙을 읽어.
  • --dry-run 또는 -n: 실제로 바꾸지 않고 예정 작업을 보여 줘.
  • -e ssh: 전송에 사용할 ssh 명령을 명시해.

실전 전송 예시

  • 홈 백업: rsync -avzP ~/ /Volumes/backup/home/
  • 원격 미러: rsync -avzP --delete ./site/ user@web:/srv/site/
  • 원격에서 받기: rsync -avzP user@server:/data/ ~/local-data/

방향과 삭제를 미리 검토하기

원격 전송이나 삭제가 포함된 작업 전에는 --dry-run --itemize-changes를 붙여 양쪽 경로와 각 변경 표시를 확인해. --delete는 대상이 다시 만들 수 있는 미러라는 사실을 확인한 뒤에만 추가해.

--delete는 삭제 권한을 줘

이 옵션은 단순한 전송 최적화가 아니라 대상에서 파일을 제거할 권한이야. 소스와 대상을 뒤집거나 제외 규칙을 잘못 쓰면 백업까지 잃을 수 있어. 스냅샷이나 별도 백업을 확보하고 dry run 결과를 검토한 뒤 사용해.

Code

mirror는 항상 dry-run 먼저·bash
rsync -avzP --delete -n \
  --exclude='.DS_Store' --exclude='node_modules' \
  ./site/ user@web:/srv/site/
# 미리보기가 맞으면 -n을 빼고 실행
rsync -avzP --delete \
  --exclude='.DS_Store' --exclude='node_modules' \
  ./site/ user@web:/srv/site/

External links

Exercise

샌드박스용 소스와 destination 디렉터리를 따로 만든 뒤 작은 파일 세 개를 준비해. 첫 실행은 rsync -avn으로 차이만 보고, 출력의 대상 경로와 trailing slash 의미를 확인한 다음 실제 복사를 실행해. 생성 명령과 rsync를 semicolon 한 줄로 묶지 마.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.