개인적으로 GUI를 사용하는 것을 좋아하지만 SSH등을 사용하여 GUI없이 작업해야만 하는 경우도 있습니다.
특히 가장 번거로운게 파일이동과 코딩일 것 같은데요 그 중에 파일이동을 위한 rsync를 설명하려합니다
scp가 일반적이지만 저같은 경우에는 로컬의 폴더와 리모트의 폴더를 동기화시킬 필요가 있었습니다.
AWS의 EC2에서 돌아가는 트위터 이미지 봇의 이미지 동기화를 위해서인데요. 이건 깃허브로 옮기기도 좀 그렇구.. SSH상에서 동영상으로 gif만들기는 좀 그렇죠 ㅋㅋㅋ
수십개의 파일을 scp로 옮기기도, 그렇다고 수백장의 파일의 폴더를 그 때 그 때 scp로 처리하기는 비효율적이라고 생각하였습니다.
준비물
- rsync
- key file ( *.pem 등등 )
저는 아마존 ec2와의 접속을 가정하여 설명하겠습니다
먼저 sudo apt-get install rsync
로 rsync의 설치여부를 확인하고 없으면 설치해줍시다.
기본적인 명령의 구조는 rsync OPTION SOURCE TARGET
입니다. 이번에는 Source가 로컬이고 Target이 SSH겠네요
간단한 구성의 제 움짤 봇의 폴더입니다. 목표는 이 gifs 라는 폴더를 ec2상의 gifs 라는 폴더로 동기화시키는 것 입니다.
사실 봇은 예전부터 가동중이지만 이번에 여러 이유로 싱크를 담당하는 코드가 날아가서 다시 적어야 했기에 작성하면서 블로그에 적습니다~
근데 솔직히 검색하면 cheatsheet 형식으로 알려주는게 좋지 별로 줄 글이 길면 재미도 없고 그러니 바로 갑시다
rsync -avz –delete -partial -e “ssh -i ./EBeb_private.pem” ./gifs ubuntu@ec2머시기머시기:~/IDOLYPRIDE_GIF_BOT/
각 옵션은
- a : archive 파일을 속성까지 복사하기 위해서입니다
- v : verbose 로 복사과정을 확인하기 위해서입니다
- z : 압축방식으로 전송하기 위해서입닏다
- delete : 원본 폴더에서 삭제한 파일은 리모트에서 싱크할 때 삭제되지 않습니다. 완전한 mirroring을 위해 이 옵션을 넣어서 원본폴더에서 지운 파일은 삭제하게 했습니다
- e : ec2에 접속하기위해서는 pem파일이 필요합니다. 이를 위해 -e 옵션을 통해 ssh 접속법을 지정하였습니다.
저는 종종써야하면서도 cron으로 정기적으로 할 필요까지는 없기에 이것을 sync.sh로 저장해두고 쓰고있습니다.
실행시키면 이렇게 전송을 합니다 여유롭게 기다리면 전송이 완료됩니다.