Skip to main content

File Copy, Transfer & Sync Tools

cp, scp, rsync, rclone 비교 및 용도별 선택 가이드


🎯 도구 비교 요약

도구용도특징적합한 경우
cp로컬 복사기본 명령어, 간단같은 시스템 내 복사
scp원격 복사SSH 기반, 간단원격 서버에 파일 몇 개 복사
rsync동기화델타 전송, 증분백업, 대용량, 반복 작업
rclone클라우드 동기화40+ 클라우드 지원S3, GDrive 등 클라우드

📋 cp (Copy)

로컬 파일/디렉토리 복사의 기본임.

기본 사용법

# 파일 복사
cp file.txt /dest/

# 파일 복사 (이름 변경)
cp file.txt /dest/newname.txt

# 여러 파일 복사
cp file1.txt file2.txt /dest/

# 디렉토리 복사 (-r)
cp -r ./folder /dest/

주요 옵션

옵션설명
-r디렉토리 재귀 복사 (필수)
-p권한, 소유자, 타임스탬프 유지
-a아카이브 모드 (-r + -p + 심볼릭링크 등 모두 유지)
-i덮어쓰기 전 확인 (interactive)
-f강제 덮어쓰기 (force)
-v복사 과정 출력 (verbose)
-u대상보다 새로운 파일만 복사 (update)
-n덮어쓰지 않음 (no-clobber)
-l복사 대신 하드링크 생성
-s복사 대신 심볼릭링크 생성

자주 쓰는 조합

# 디렉토리 전체 복사 (권한 유지)
cp -rp /source/ /dest/

# 아카이브 모드 (가장 안전)
cp -a /source/ /dest/

# 확인하면서 복사
cp -iv file.txt /dest/

# 새로운 파일만 복사 (업데이트)
cp -u /source/* /dest/

# 진행 상황 보기
cp -rv /source/ /dest/

와일드카드 사용

# 모든 txt 파일
cp *.txt /dest/

# 특정 패턴
cp file?.txt /dest/ # file1.txt, fileA.txt 등
cp file[1-3].txt /dest/ # file1.txt, file2.txt, file3.txt

# 숨김 파일 포함
cp -a /source/. /dest/ # 점(.)으로 숨김 파일 포함

주의사항

# 슬래시 유무 차이
cp -r /source /dest/ # /dest/source/ 생성
cp -r /source/ /dest/ # /dest/ 안에 내용물 복사 (source 폴더 자체는 안 생김)
# ※ 이건 rsync와 다름. cp는 슬래시 유무 상관없이 비슷하게 동작

# 심볼릭 링크 처리
cp file.txt # 링크가 가리키는 파일 복사
cp -P file.txt # 링크 자체를 복사
cp -a # 링크 자체를 복사 (-P 포함)

장단점

장점단점
간단하고 직관적원격 복사 불가
별도 설치 불필요증분 복사 없음
빠름 (로컬)대용량은 rsync가 나음

📁 scp (Secure Copy)

SSH 기반 원격 파일 복사 도구임.

기본 사용법

# 로컬 → 원격
scp file.txt user@remote:/path/to/destination/

# 원격 → 로컬
scp user@remote:/path/to/file.txt ./

# 디렉토리 복사 (-r)
scp -r ./folder user@remote:/path/to/

# 포트 지정 (-P)
scp -P 2222 file.txt user@remote:/path/

주요 옵션

옵션설명
-r디렉토리 재귀 복사
-P포트 지정 (대문자 주의)
-p권한, 타임스탬프 유지
-C압축 전송
-iSSH 키 파일 지정
-q진행 상황 숨김
-l대역폭 제한 (Kbit/s)

예시

# SSH 키로 원격 복사
scp -i ~/.ssh/mykey.pem file.txt ec2-user@1.2.3.4:/home/ec2-user/

# 압축 + 디렉토리 복사
scp -rC ./logs user@backup-server:/backup/

# 원격 → 원격 (두 서버 간 직접 복사)
scp user1@server1:/file.txt user2@server2:/path/

# 대역폭 제한 (1000 Kbit/s = 약 125KB/s)
scp -l 1000 largefile.tar.gz user@remote:/path/

장단점

장점단점
간단하고 직관적매번 전체 파일 복사
SSH 기반 (보안)증분 전송 없음
별도 설치 불필요대용량/반복 작업에 비효율
중단 시 이어받기 불가

🔄 rsync (Remote Sync)

델타 전송 기반 고효율 동기화 도구임.

핵심 개념

델타 전송: 파일의 변경된 블록만 전송하여 네트워크/시간 절약함.

기본 사용법

# 기본 동기화 (로컬)
rsync -av /source/ /destination/

# 원격 동기화 (SSH)
rsync -avz /source/ user@remote:/destination/

# 원격 → 로컬
rsync -avz user@remote:/source/ /destination/

주요 옵션

옵션설명
-a아카이브 모드 (권한, 소유자, 타임스탬프 등 유지)
-v상세 출력 (verbose)
-z압축 전송
-P진행률 표시 + 부분 전송 재개
--delete소스에 없는 파일은 대상에서 삭제
-nDry-run (실제 실행 안 함, 테스트용)
-e원격 쉘 지정 (예: ssh -p 2222)
--exclude제외 패턴
--include포함 패턴
--bwlimit대역폭 제한 (KB/s)

자주 쓰는 조합

# 기본 동기화 (권장)
rsync -avz /source/ user@remote:/dest/

# 진행률 + 이어받기
rsync -avzP /source/ user@remote:/dest/

# 미러링 (삭제 포함)
rsync -avz --delete /source/ user@remote:/dest/

# Dry-run (테스트)
rsync -avzn --delete /source/ user@remote:/dest/

# 특정 포트
rsync -avz -e 'ssh -p 2222' /source/ user@remote:/dest/

# 대역폭 제한 (1000 KB/s)
rsync -avz --bwlimit=1000 /source/ /dest/

⚠️ 경로 끝 슬래시(/) 주의

cp와 차이: cp는 슬래시 유무와 관계없이 동작이 비슷하지만, rsync는 슬래시 유무로 동작이 달라짐!

제외/포함 패턴

# 특정 파일 제외
rsync -av --exclude '*.log' /source/ /dest/

# 여러 패턴 제외
rsync -av --exclude '*.log' --exclude '*.tmp' --exclude '.git' /source/ /dest/

# 제외 파일 사용
rsync -av --exclude-from='exclude-list.txt' /source/ /dest/

# exclude-list.txt 예시:
# *.log
# *.tmp
# .git/
# node_modules/

백업 시나리오

증분 백업:

#!/bin/bash
# 매일 실행하는 증분 백업

SOURCE="/data/"
DEST="/backup/data/"
LOG="/var/log/backup-$(date +%Y%m%d).log"

rsync -avz --delete \
--exclude '*.tmp' \
--exclude 'cache/' \
"$SOURCE" "$DEST" \
> "$LOG" 2>&1

스냅샷 백업 (하드링크 활용):

#!/bin/bash
# 일별 스냅샷 (이전 백업과 하드링크로 용량 절약)

DATE=$(date +%Y-%m-%d)
SOURCE="/data/"
DEST="/backup/snapshots/"
LATEST="$DEST/latest"
CURRENT="$DEST/$DATE"

rsync -avz --delete \
--link-dest="$LATEST" \
"$SOURCE" "$CURRENT"

# latest 심볼릭 링크 갱신
rm -f "$LATEST"
ln -s "$CURRENT" "$LATEST"

rsync daemon 모드

별도 포트(873)로 rsync 서비스 운영 가능함.

/etc/rsyncd.conf:

[backup]
path = /data/backup
comment = Backup Directory
read only = no
list = yes
auth users = backupuser
secrets file = /etc/rsyncd.secrets
hosts allow = 192.168.1.0/24
# 클라이언트에서 접속
rsync -avz /source/ backupuser@server::backup/

장단점

장점단점
델타 전송 (효율적)scp보다 문법 복잡
증분 백업 가능클라우드 직접 지원 안 함
중단 후 재개 가능
다양한 옵션
대역폭 제한 가능

☁️ rclone (Rsync for Cloud)

클라우드 스토리지 동기화 도구임.

지원 서비스 (40+)

유형예시
Object StorageAWS S3, GCS, Azure Blob, MinIO
Cloud DriveGoogle Drive, OneDrive, Dropbox
FTP/SFTPFTP, SFTP, WebDAV
기타Backblaze B2, Wasabi, Mega

설치

# Linux
curl https://rclone.org/install.sh | sudo bash

# 또는 패키지 매니저
sudo apt install rclone # Ubuntu/Debian
sudo yum install rclone # CentOS/RHEL

설정

# 대화형 설정
rclone config

# 설정 파일 위치
~/.config/rclone/rclone.conf

S3 설정 예시:

[mys3]
type = s3
provider = AWS
env_auth = false
access_key_id = AKIAXXXXXXXX
secret_access_key = xxxxxxxxxxxxxxxx
region = ap-northeast-2

Google Drive 설정:

rclone config
# n) New remote
# name: gdrive
# Storage: drive
# (OAuth 인증 진행)

기본 명령어

# 리모트 목록
rclone listremotes

# 파일 목록
rclone ls mys3:bucket-name/
rclone lsd mys3:bucket-name/ # 디렉토리만

# 복사 (로컬 → 클라우드)
rclone copy /local/path mys3:bucket-name/path/

# 복사 (클라우드 → 로컬)
rclone copy mys3:bucket-name/path/ /local/path/

# 동기화 (미러링)
rclone sync /local/path mys3:bucket-name/path/

# 양방향 동기화
rclone bisync /local/path mys3:bucket-name/path/

copy vs sync vs bisync

명령어동작
copy소스 → 대상 복사 (대상의 기존 파일 유지)
sync소스 → 대상 미러링 (대상에만 있는 파일 삭제)
bisync양방향 동기화

주요 옵션

옵션설명
-P진행률 표시
--dry-run테스트 (실제 실행 안 함)
-v상세 출력
--exclude제외 패턴
--bwlimit대역폭 제한
--transfers동시 전송 수 (기본 4)

실전 예시

# S3 버킷 동기화
rclone sync /data/backup mys3:my-backup-bucket/ -P

# Google Drive 백업
rclone copy /home/user/documents gdrive:Backups/documents/ -P

# 특정 파일만
rclone copy mys3:bucket/ /local/ --include "*.csv"

# 대역폭 제한 (10MB/s)
rclone sync /data mys3:bucket/ --bwlimit 10M

# Dry-run
rclone sync /data mys3:bucket/ --dry-run -v

마운트 기능

클라우드 스토리지를 로컬 디렉토리처럼 마운트 가능함:

# S3 버킷 마운트
rclone mount mys3:bucket-name /mnt/s3 --daemon

# Google Drive 마운트
rclone mount gdrive: /mnt/gdrive --daemon

# 언마운트
fusermount -u /mnt/s3

장단점

장점단점
40+ 클라우드 지원로컬 ↔ 로컬은 rsync가 나음
통일된 인터페이스설정 필요
암호화 지원 (crypt)
마운트 기능

🆚 언제 뭘 쓰나

상황권장 도구
같은 서버 내 파일 복사cp
원격 서버에 파일 몇 개 복사scp
서버 간 백업/동기화rsync
대용량 디렉토리 동기화rsync
정기 백업 자동화rsync + cron
S3, GCS 등 클라우드rclone
Google Drive, Dropboxrclone
클라우드 마운트rclone

전송 효율 비교


📋 명령어 요약

cp

cp file.txt /dest/                # 파일 복사
cp -r ./dir /dest/ # 디렉토리 복사
cp -a /source/ /dest/ # 아카이브 (권한 유지)
cp -u /source/* /dest/ # 새로운 것만 복사

scp

scp file.txt user@remote:/path/           # 업로드
scp user@remote:/path/file.txt ./ # 다운로드
scp -r ./dir user@remote:/path/ # 디렉토리
scp -P 2222 file.txt user@remote:/path/ # 포트 지정

rsync

rsync -avz /src/ /dest/                   # 로컬 동기화
rsync -avz /src/ user@remote:/dest/ # 원격 동기화
rsync -avzP /src/ user@remote:/dest/ # 진행률 + 재개
rsync -avz --delete /src/ /dest/ # 미러링
rsync -avzn /src/ /dest/ # Dry-run

rclone

rclone config                              # 설정
rclone ls remote:bucket/ # 목록
rclone copy /local remote:bucket/ -P # 복사
rclone sync /local remote:bucket/ -P # 동기화
rclone mount remote:bucket /mnt --daemon # 마운트

🔗 참고 자료