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 / 명령어 / hostnamectl - 호스트 이름과 시스템 정보 확인·변경

Linux / 명령어 / hostnamectl - 호스트 이름과 시스템 정보 확인·변경

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

Linux / 명령어 / nohup - 로그아웃 후에도 명령 계속 실행

Linux / 명령어 / nohup - 로그아웃 후에도 명령 계속 실행

Linux nohup 명령어로 로그아웃 후에도 작업을 계속 실행하는 방법을 설명합니다. 백그라운드 실행, 입출력 리디렉션, PID 확인과 종료, 로그 관리 및 systemd·tmux와의 차이를 정리합니다.

Linux 강좌 / 리눅스란 무엇인가? 커널, 배포판, 오픈 소스 이해하기

Linux 강좌 / 리눅스란 무엇인가? 커널, 배포판, 오픈 소스 이해하기

리눅스 커널과 배포판은 어떻게 다를까요? 사용자 공간과 오픈 소스의 의미를 구분하고, 현재 시스템의 커널·배포판 정보를 확인하는 방법을 알아봅니다.

Linux / 명령어 / reboot - 시스템 안전하게 재시작

Linux / 명령어 / reboot - 시스템 안전하게 재시작

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

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

cat, less, more, head, tail로 리눅스 파일 내용을 읽는 방법을 비교합니다. 짧은 파일과 긴 파일, 앞·뒤 일부를 확인할 때의 선택 기준과 실습 결과를 설명합니다.

Linux / 명령어 / dmesg - 커널 메시지와 부팅 로그 확인

Linux / 명령어 / dmesg - 커널 메시지와 부팅 로그 확인

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

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

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

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

Linux / 명령어 / type - 명령어 유형과 실행 대상 확인

Linux / 명령어 / type - 명령어 유형과 실행 대상 확인

Bash type 명령어로 별칭, 예약어, 함수, 내장 명령과 실행 파일을 구분하는 방법을 설명합니다. 모든 후보와 경로 확인, command -v·which와의 차이 및 스크립트 활용법을 다룹니다.

Linux / 명령어 / tac - 파일을 마지막 줄부터 역순 출력

Linux / 명령어 / tac - 파일을 마지막 줄부터 역순 출력

Linux tac 명령어로 파일의 줄 순서를 뒤집어 마지막 줄부터 출력하는 방법을 설명합니다. 여러 파일 처리, 구분자 변경과 로그 확인 예제를 함께 정리합니다.

Linux / 명령어 / find - 조건으로 파일과 디렉터리 검색

Linux / 명령어 / find - 조건으로 파일과 디렉터리 검색

Linux find 명령어로 경로, 이름, 종류, 크기, 시간과 권한 조건을 조합해 파일을 찾는 방법을 설명합니다. 안전한 exec 사용과 삭제 전 검증도 다룹니다.