리눅스에서 파일과 디렉토리를 복사하는 방법
1. 로컬 → 로컬 복사
cp 명령어
- 가장 기본적인 파일/디렉토리 복사 명령어입니다.
# 파일 복사
cp source.txt target.txt
# 디렉토리 복사 (-r 옵션 필수)
cp -r /home/user/data /home/user/backup옵션 설명
-r: 디렉토리 재귀 복사-a: 권한, 소유자, 타임스탬프 유지 (아카이브 모드)-v: 복사 과정 출력
cp -av source_dir target_dirrsync 명령어
rsync는 변경된 파일만 복사하므로 백업 및 동기화 작업에 매우 효율적입니다.
rsync -av source_dir/ target_dir/옵션 설명
-a: 아카이브 모드 (권한, 소유자 유지)-v: 진행 과정 출력/유무 주의source_dir/→ 내부 파일만 복사source_dir→ 디렉토리 자체 복사
rsync -a --info=progress2 \
--exclude='storage/cache/' \
www/ www_$(date '+%Y%m%d')/2. 로컬 ↔ 원격 서버 간 복사
로컬 → 원격 서버
scp 명령어
# 간단한 파일 전송
scp file.txt [email protected]:/remote/path/
# 디렉토리 복사
scp -r ./local_dir [email protected]:/remote/path/rsync 명령어
rsync -avz /local/dir/ [email protected]:/remote/dir/옵션 설명
-z: 전송 중 압축--progress: 전송 진행률 표시--delete: 대상 디렉토리에서 불필요한 파일 제거
rsync -avz --progress /local/dir/ user@remote:/remote/dir/tar + ssh(디렉토리 통째 전송)
- 압축 없이 스트림 형태로 전달하므로 대용량 디렉토리 복사에 유리합니다.
tar cf - ./my_folder | ssh user@remote_host "tar xf - -C /target/path"진행률 확인(pv 사용)
tar cf - ./data | pv | ssh user@remote "tar xf -"zstd를 이용한 고속 압축 백업
tar -I zstd -cf backup.tar.zst ./my_folder파일 내용만 전송(cat + ssh)
- 설정 파일이나 작은 텍스트 전달 시 유용
cat local_file.txt | ssh user@remote_host "cat > remote_file.txt"원격 서버 → 로컬
scp
scp [email protected]:/remote/path/file.txt /local/path/rsync
rsync -avz [email protected]:/remote/dir/ /local/dir/원격 파일 내용 가져오기
ssh user@remote_host "cat /path/to/remote_file.txt" > local_file.txtrsync를 이용한 원격 서버 디렉터리 안전 백업/동기화
권한·소유권을 유지하면서, 불필요한 파일은 제외하고, sudo 권한으로 원격 서버의 디렉터리를 동기화하는 방법입니다.
sudo rsync -avzPH \
--numeric-ids \
--exclude="*.log" \
--exclude="cache/" \
--rsync-path="sudo rsync" \
user@REMOTE_SERVER:/app/webroot/api/ \
/app/webroot/옵션 설명
-a(archive) : 파일 권한, 소유자, 심볼릭 링크 등을 유지하며 동기화-v(verbose) : 진행 상황을 상세히 출력-z(compress) : 전송 중 데이터 압축 (네트워크 효율 향상)-P--progress: 파일 전송 진행률 표시--partial: 전송 중단 시 이어받기 가능
-H: 하드링크 유지 (디스크 사용량 절감)--numeric-ids: UID/GID 일관성 유지--exclude: 불필요한 파일 제외--exclude="*.log"--exclude="cache/"
--rsync-path="sudo rsync": 원격 sudo 권한 사용- user@REMOTE_SERVER:/app/webroot/api/ : 경로 지정
/api/→ 디렉터리 내용만 복사/api→api디렉터리 자체가 생성됨
이 글에서는 로컬 환경 간 복사부터 로컬 – 원격 서버 간 복사까지 실무에서 자주 사용하는 명령어와 활용 예제입니다.