클라우드 환경에서 작업을 하다보면 현재 내가 작업 중인 컴퓨터의 특정 디렉터리와 서버의 디렉터리를 동기화하고 싶을 때가 있습니다. 내 컴퓨터의 코드와 데이터를 있는 구조 그대로 서버로 옮기거나, 서버에서 작업 중이던 데이터와 구조를 그대로 내 컴퓨터로 옮기고 싶을 때가 있죠.
한가지 방법은 git을 써서 push하고 pull하는 방법이 있지만, 이 경우에 중간 서버를 경유해야한다는 단점이 있고, 무엇보다 아직 repository에 push하면 안 되는 중간 내역들이 push되게 됩니다. 이런 상황에서 유용한 툴이 rsync입니다.
rsync는 두 path의 내용을 똑같이 맞춰주는 역할을 합니다. 두 path는 local-local도 되고, server-local도 됩니다. 최초 한번은 전체를 복사해야하기 때문에 시작이 좀 걸리지만, 한번 하고나면 이전 Sync와 비교해서 차이가 난 부분만 복사하기 때문에 아주 속도가 빠릅니다.
예를 들어 저는 현재 Mac의 /Users/ceongjeein/Workspace/dl에서 작업을 하고 있고, 똑같은 서버의 경로는 Ubuntu의 /home/ceongjeein/Workspace/dl이라고 가정해보겠습니다.
랩탑에서 서버로 데이터를 동기화하기 위해서는 아래와 같이 명령해줍니다.
rsync -avh --progress --exclude 'venv' --exclude '__pycache__' /Users/ceongjeein/Workspace/dl/ ceongjeein@dl.local:/home/ceongjeein/Workspace/dl/
- 기본 형식은 "rsync 옵션들 원본경로 목적지경로"입니다.
- -a: 원본경로의 디렉토리 구조를 하위까지 돌면서 (recursive) 퍼미션, 링크 등의 정보를 모두 복사합니다.
- -v: 동기화 현황을 자세히 보여줍니다.
- -h: 동기화 현황의 숫자들을 사람이 보기 좋은 형태로 출력합니다.
- --exclude: 동기화에서 제외할 패턴입니다. 이 경우에 venv를 쓰고 있는데 시스템마다 하위 내용이 다르기 때문에 제외했습니다. __pycache__도 마찬가지고요.
- -z: 여기에서는 안 썼지만 데이터를 압축 후 전송합니다. 네트워크가 아주 느린 경우라면 도움이 좀 되겠지만 아니라면 쓰지 않는 편이 오히려 좋습니다. 압축에 들어가는 CPU 오버헤드가 더 큰 경우가 많거든요.
반대로 서버에서 데이터를 동기화해 올 때는 원본 경로와 목적 경로만 바꿔주면 됩니다.
rsync -avh --progress --exclude 'venv' --exclude '__pycache__' ceongjeein@dl.local:/home/ceongjeein/Workspace/dl/ /Users/ceongjeein/Workspace/dl/
한가지 팁은, 첫번째 명령을 sync_to_server.sh, 두번째 명령을 sync_to_laptop.sh로 저장해두고 필요에 따라 실행하시면 더욱 간편합니다.
'Linux' 카테고리의 다른 글
디렉터리 구조를 확인하고 싶을 때 - tree (0) | 2020.05.23 |
---|---|
직전 명령의 마지막 인자 재활용하기 : !$ (0) | 2020.05.06 |
특정 포트를 잡고 있는 프로세스 알아내기 (0) | 2020.04.29 |
텍스트 파일의 특정 줄 주변을 보고 싶을 때 : head & tail (0) | 2020.04.28 |
네트워크를 통해 파일을 빠르게 복사하기: nc 명령어 (3) | 2020.04.26 |