Linux / 명령어 / rsync - 파일·디렉터리의 변경분 동기화

rsync는 로컬 또는 원격 위치 사이에서 파일을 복사하고 변경된 항목을 효율적으로 동기화합니다. 대량 자료의 반복 전송에 유용하지만 대상 경로와 삭제 옵션을 잘못 지정하면 자료가 손실될 수 있습니다.

rsync 명령어란?

기본적으로 크기와 수정 시각을 비교해 전송 대상을 고릅니다. -a는 재귀 복사와 주요 메타데이터 보존을 묶은 아카이브 모드입니다. source/는 디렉터리의 내용물을, source는 디렉터리 자체를 목적지에 복사한다는 차이가 중요합니다. SSH 방식 원격 경로는 사용자@호스트:경로로 씁니다.

기본 문법

rsync [옵션] 원본 대상

설치된 구현과 옵션은 배포판에 따라 다를 수 있습니다. man rsync으로 현재 시스템의 설명을 확인하세요.

사용 예제

실제 변경 전 미리 보기

출력 목록으로 대상 경로와 복사 범위를 확인합니다.

rsync -av --dry-run project/ backup/project/

로컬 디렉터리 동기화

원본 디렉터리 안의 내용을 대상으로 복사합니다.

rsync -av project/ backup/project/

SSH로 원격 전송

원격에도 rsync가 설치돼 있어야 하며 계정·경로를 실제 값으로 바꿉니다.

rsync -av project/ alice@server.example.com:/home/alice/project/

실제 복사 전 미리 보기

rsync --dry-run은 변경 예정 파일 목록을 보여주되 데이터를 실제로 복사하지 않습니다. 끝의 슬래시 유무에 따라 대상에 생성되는 디렉터리 구조가 달라집니다.

rsync -av --dry-run source/ backup/

source/ 안에 notes.txt가 있고 대상에 없을 때의 예시 출력:

sending incremental file list
notes.txt

이 명령은 source 디렉터리 자체가 아니라 그 안의 내용을 backup/에 동기화할 예정임을 뜻합니다. --delete를 추가하면 대상에만 있는 파일이 삭제될 수 있으므로 반드시 --dry-run 결과를 검토하세요. 실제 실행 후에는 파일 수·크기나 체크섬으로 중요 파일을 확인합니다.

-a는 재귀 복사와 일부 메타데이터 보존을 묶지만 ACL·확장 속성·하드 링크 등 모든 속성을 항상 보존하는 완전한 백업 옵션은 아닙니다. 필요한 속성은 대상 파일시스템과 권한을 확인한 뒤 별도 옵션으로 지정하세요. 동기화 결과가 중요하면 대상에서 복원 시험도 수행해야 합니다.

주요 옵션과 형식

옵션·형식 설명
-a 재귀 복사와 주요 속성 보존을 묶은 아카이브 모드입니다.
-v 처리 항목을 자세히 표시합니다.
-n, --dry-run 실제 변경 없이 작업 계획을 출력합니다.
--delete 원본에 없는 대상 파일을 삭제합니다. 반드시 사전 검토가 필요합니다.
--exclude=패턴 지정한 패턴의 파일을 전송에서 제외합니다.
-e 'ssh -p 포트' 원격 셸 명령과 포트를 지정합니다.

사용할 때 주의할 점

--delete는 대상 파일을 실제로 제거합니다. 원본·대상 경로의 끝 슬래시와 필터 규칙을 확인하고 --dry-run으로 삭제 목록을 검토하세요. rsync는 백업 자체가 아니며 원본의 실수·손상도 복제될 수 있습니다. 원격 전송은 보통 양쪽에 rsync가 필요하고, 아카이브 모드가 ACL·확장 속성까지 모두 보존하는 것은 아닙니다.

자주 묻는 질문

rsync에서 source와 source/는 어떻게 다른가요?

source/는 그 디렉터리의 내용물을 대상으로 옮기고, source는 디렉터리 자체가 목적지 아래에 생기도록 복사합니다.

공식 문서

옵션의 정확한 동작과 구현별 차이는 rsync 관련 공식 문서에서 확인할 수 있습니다.

같은 카테고리의 다른 글
Linux / 명령어 / truncate - 파일 크기 줄이기와 늘리기

Linux / 명령어 / truncate - 파일 크기 줄이기와 늘리기

Linux truncate 명령어로 파일 크기를 지정하거나 늘리고 줄이는 방법을 설명합니다. 희소 파일, 상대 크기 조정, 기준 파일과 같은 크기로 맞추는 방법 및 데이터 손실 주의점을 알아봅니다.

Linux / 명령어 / info - GNU 문서 확인

Linux / 명령어 / info - GNU 문서 확인

info 명령어로 GNU 설명서를 탐색하는 방법을 설명합니다. 노드와 메뉴 이동, 본문·색인 검색, 특정 문서 위치 지정, 텍스트 출력과 문서가 없을 때의 해결 방법을 정리합니다.

Linux / 명령어 / blkid - 블록 장치 UUID와 파일 시스템 형식 조회

Linux / 명령어 / blkid - 블록 장치 UUID와 파일 시스템 형식 조회

Linux blkid 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / comm - 정렬된 두 파일의 공통·고유 행 비교

Linux / 명령어 / comm - 정렬된 두 파일의 공통·고유 행 비교

Linux comm 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / dirname - 경로에서 디렉터리 부분 추출

Linux / 명령어 / dirname - 경로에서 디렉터리 부분 추출

Linux dirname 명령어로 경로의 디렉터리 부분을 추출하는 방법을 설명합니다. 입력 형태별 결과와 basename, realpath의 차이 및 셸 스크립트 활용법을 정리합니다.

Linux / 명령어 / ssh - 암호화된 원격 접속과 명령 실행

Linux / 명령어 / ssh - 암호화된 원격 접속과 명령 실행

Linux ssh 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / join - 공통 필드로 두 파일 결합

Linux / 명령어 / join - 공통 필드로 두 파일 결합

Linux join 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux stat 명령어로 파일 크기, 권한, 소유자, inode와 타임스탬프를 확인하는 방법을 설명합니다. atime·mtime·ctime·Birth의 차이와 출력 형식, 파일 시스템 조회법도 정리합니다.

Linux / 명령어 / fold - 긴 행을 지정한 너비로 나누기

Linux / 명령어 / fold - 긴 행을 지정한 너비로 나누기

Linux fold 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / ps - 현재 프로세스 상태 확인

Linux / 명령어 / ps - 현재 프로세스 상태 확인

Linux ps 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.