
Linux에서 파일/폴더를 복사하는 방법은 여러 가지가 있지만, 실무에서는 **cp와 rsync**를 가장 많이 사용합니다.
1. cp — 가장 기본적인 복사
파일 하나 복사
cp file.txt /home/pion79/backup/file.txt를 backup 폴더에 복사합니다.
파일 이름을 바꿔서 복사할 수도 있습니다.
cp file.txt /home/pion79/backup/newfile.txt폴더 복사
폴더는 -r 또는 -R이 필요합니다.
cp -r project /home/pion79/backup/결과:
backup/
└── project/
├── file1
└── file2여러 파일 복사
cp file1.txt file2.txt /backup/파일 속성까지 보존
cp -a project /backup/-a는 archive 모드로, 권한/소유자/시간 등의 속성을 최대한 보존하면서 복사합니다.
2. rsync — 대량 복사/백업에 매우 유용
rsync는 단순히 "복사"하는 것보다 **동기화(sync)**에 가깝습니다.
예를 들어:
원본
/home/pion79/project/
↓
대상
/home/pion79/backup/project/라고 할 때,
rsync -av /home/pion79/project/ /home/pion79/backup/project/를 실행하면 원본과 대상의 차이를 확인해서 필요한 파일만 복사합니다.
2-1. 가장 기본적인 형태
rsync [옵션] 원본 대상예:
rsync -av source/ backup/여기서:
-a는 archive 모드
-v는 진행 내용을 화면에 보여주는 verbose입니다.
따라서 보통:
rsync -av source/ backup/를 기본형으로 기억하면 좋습니다.
3. rsync에서 가장 중요한 /
초보자에게 가장 중요한 부분입니다.
다음 두 명령은 결과가 다릅니다.
/가 있는 경우
rsync -av project/ backup/의 의미:
project안의 내용물을backup으로 복사
결과:
backup/
├── file1
├── file2
└── src//가 없는 경우
rsync -av project backup/의 의미:
project폴더 자체를backup안에 복사
결과:
backup/
└── project/
├── file1
├── file2
└── src/따라서 다음처럼 기억하면 쉽습니다.
project/ → project 안의 내용
project → project 폴더 자체4. rsync는 왜 cp보다 좋은가?
예를 들어 100GB짜리 폴더가 있다고 합시다.
처음에는:
rsync -av project/ backup/100GB를 복사합니다.
그 후 file1.txt 하나만 수정했습니다.
다시:
rsync -av project/ backup/하면 변경되지 않은 파일은 다시 복사하지 않고, 필요한 변경사항만 처리합니다.
그래서 백업에 특히 좋습니다.
첫 번째
100GB ───────────────→ 100GB
두 번째
변경된 파일 몇 MB ──→ 몇 MB5. 진행률을 보고 싶다면
대용량 파일을 복사할 때 매우 유용합니다.
rsync -avh --progress source/ backup/-h는 용량을 사람이 읽기 편하게 표시합니다.
예:
1.2G
350M
25K6. 전체 진행률을 보고 싶다면
파일이 아주 많을 때는:
rsync -avh --info=progress2 source/ backup/이 방식이 편합니다.
예:
1.25G 32% 85.32MB/s 0:00:427. 삭제까지 동기화하려면 --delete
이것은 주의해서 사용해야 합니다.
rsync -av --delete source/ backup/원본에서 파일을 삭제하면 대상에서도 삭제합니다.
예:
원본 백업
A.txt A.txt
B.txt B.txt
C.txt C.txt원본에서 C.txt 삭제:
원본 백업
A.txt A.txt
B.txt B.txt
C.txt다시:
rsync -av --delete source/ backup/하면:
원본 백업
A.txt A.txt
B.txt B.txtC.txt도 백업에서 삭제됩니다.
따라서 백업할 때 무조건 --delete를 붙이는 것은 추천하지 않습니다.
8. 특정 파일/폴더 제외
예를 들어 node_modules를 제외하고 싶다면:
rsync -av \
--exclude='node_modules/' \
project/ backup/여러 개도 가능합니다.
rsync -av \
--exclude='node_modules/' \
--exclude='.git/' \
--exclude='dist/' \
project/ backup/웹/Node 프로젝트를 백업할 때 상당히 유용합니다.
9. 다른 디스크로 복사
예를 들어 전에 설정하신 USB가:
/home/pion79/usb에 mount되어 있다면,
rsync -avh --progress \
/home/pion79/Projects_Laptop/ \
/home/pion79/usb/Projects_Laptop/처럼 사용할 수 있습니다.
특히 대용량 디렉터리를 USB로 백업할 때 rsync가 좋습니다.
10. SSH를 이용한 다른 컴퓨터로 복사
rsync의 아주 강력한 기능입니다.
예:
rsync -avh project/ pion79@192.168.0.20:/home/pion79/backup/project/내 컴퓨터의 project를 다른 Linux 컴퓨터로 전송합니다.
반대로 가져올 수도 있습니다.
rsync -avh pion79@192.168.0.20:/home/pion79/project/ ./project/즉:
내 컴퓨터
│
│ SSH + rsync
↓
다른 Linux 컴퓨터11. rsync에서 자주 사용하는 옵션
옵션 | 의미 |
|---|---|
| archive, 권한/시간 등을 보존 |
| 복사 내용을 표시 |
| 용량을 사람이 읽기 쉽게 표시 |
| 파일별 진행률 표시 |
| 전체 진행률 표시 |
| 원본에 없는 파일을 대상에서 삭제 |
| 특정 파일/폴더 제외 |
| 실제 복사하지 않고 테스트 |
| 네트워크 전송 시 압축 |
특히 -n은 꼭 알아두는 것을 추천합니다.
12. rsync -n — 실제 복사 전에 테스트
예를 들어:
rsync -avhn source/ backup/이렇게 하면 실제로 파일을 복사하지 않고, 무엇을 복사할 것인지 보여줍니다.
즉:
실제 실행
rsync -av source/ backup/
안전하게 먼저 확인
rsync -avhn source/ backup/특히 --delete를 사용할 때:
rsync -avhn --delete source/ backup/로 먼저 확인하는 습관을 추천합니다.
13. cp와 rsync를 언제 사용할까?
간단하게 정리하면:
파일 하나
↓
cp
작은 폴더 한 번 복사
↓
cp -r 또는 cp -a
대용량 폴더
↓
rsync
반복적인 백업
↓
rsync
변경된 것만 다시 복사
↓
rsync
USB/외장디스크 백업
↓
rsync
다른 Linux 컴퓨터로 복사
↓
rsync + SSH제가 추천하는 rsync 기본 명령
일단 이것 하나를 익히시면 됩니다.
rsync -avh --progress 원본/ 대상/그리고 삭제까지 원본과 완전히 똑같이 만들고 싶을 때만:
rsync -avh --progress --delete 원본/ 대상/를 사용하세요.
특히 rsync는 / 하나 때문에 결과가 달라지고 --delete는 실수하면 파일을 삭제할 수 있기 때문에, 처음에는 -n(dry-run)으로 확인하는 습관을 들이는 것이 좋습니다.
