사용자의 의도에 따라 두 가지 방법이 있습니다.
-
전송 구간만 압축하기 (scp -C): 파일은 그대로 두고, 전송하는 도중에만 데이터를 압축해서 속도를 높이는 방법.
-
묶어서 보내고 풀기 (tar + ssh): 폴더 전체를 압축 파일로 만들어 보내면서, 동시에 도착지에서 즉시 압축을 해제하는 방법. (작은 파일이 많을 때 scp -r보다 훨씬 빠름)
방법 1: 전송 구간만 압축 (scp -C)
scp 자체 옵션인 -C (Compression)를 사용합니다.
이 옵션은 데이터를 네트워크로 보낼 때 gzip으로 압축해서 보내고, 서버가 받으면 자동으로 원래대로 풀어줍니다. 사용자는 별도로 압축/해제 명령을 칠 필요가 없습니다.
-
용도: 텍스트 파일, 로그 파일 등 압축 효율이 좋은 파일을 보낼 때 속도가 빨라집니다. (이미 압축된 jpg, zip 등에는 효과 미미)
# -C 옵션을 추가하면 됩니다.
scp -C -r /local/folder user@1.2.3.4:/remote/path
방법 2: 실시간 압축 전송 및 해제 (tar + ssh) ★ 추천

만약 **”작은 파일이 수천 개 있는 폴더”**를 보낸다면 scp -r은 매우 느립니다.
이때는 scp 대신 tar로 묶어서 ssh 파이프라인으로 보내는 것이 압도적으로 빠릅니다.
이 명령어 한 줄로 **[로컬에서 압축] -> [전송] -> [서버에서 즉시 해제]**가 동시에 일어납니다.
# 문법
tar czf - [보낼폴더] | ssh [계정]@[IP] "cd [받을경로] && tar xzf -"
# 예시: local_folder를 서버의 /home/user/target_dir 로 보내기
tar czf - local_folder | ssh user@1.2.3.4 "cd /home/user/target_dir && tar xzf -"
명령어 상세 설명:
-
tar czf – local_folder: 로컬 폴더를 압축하되, 파일로 만들지 말고 화면(표준출력, –)으로 내보냅니다.
-
|: 그 데이터를 파이프로 넘깁니다.
-
ssh …: 서버에 접속합니다.
-
“cd … && tar xzf -“: 서버에 도착한 데이터를 받아서(–) 즉시 압축을 풉니다.
요약
-
그냥 전송 속도만 조금 높이고 싶다 -> scp -C …
-
파일 개수가 많은 폴더를 통째로 빠르게 옮기고 싶다 -> tar | ssh … (방법 2)