우분투 리눅스에서 특정 파일/폴더 빼고 복사 하는 방법 (repo 나 git folder 제외 하고 복사하기)


Ubuntu 사용중 특히 Android 개발을 하는 사람이라면 특정 파일이나 폴더를 제외한 상태로 복사를 해야할 경우가 많을 것 입니다. 안드로이드 소스는 전체 용량이 .repo 폴더를 포함해 10G 를 넘기 때문에 copy 하거나 압축하는데 많은 시간이 걸립니다. 게다가 대량의 파일일 경우 기존 복사하던 폴더에 변경된 파일만을 copy 해서 빨리 backup 본을 만들고 싶은 경우도 있습니다. rsync를 사용해서 backup을 하는 경우도 많지요.



이런것을 하기에 cp 명령어는 특정 파일이나 폴더를 제외하는 옵션을 제공하지 않기 때문에 적절하지 않습니다.



이때 사용할 수 있는 명령은 바로 rsync 입니다.


rsync 는 네트웍 상에서도 복사가 가능하게 해주기 때문에 backup 용으로도 아주 적절한 명령어 입니다.

backup 으로 사용하는 경우 network 복사 기능은 아주 유용합니다. scp 로 network 복사가 가능하지만 scp 의 기능상의 한계가 있기 때문에 rsync 가 더 유용합니다.


일단 간단한 사용법을 보면 일반적인 cp 명령어와 동일한 기능을 하도록


rsync src dest


라고 쓰면 됩니다.


여기에 복사된 파일의 update 시간을 원본과 동일하게 유지 하려면 -t 옵션을 사용하면 됩니다.


rsync -t src dest


복사 시간을 단축하기 위하여 복사될 파일을 압축하는 옵션은 -z 입니다.


rsync -z src dest


하위 폴더를 복사하는 옵션은 -r 입니다.


rsync -r src dest



symbolic link 파일을 유지 하는 옵션은 -l 입니다.


rsync -l src dest


permission 을 유지하는 옵션은 -p 입니다.


rsync -p src dest


group 을 유지하는 옵션은 -g 입니다.


rsync -g src dest


owner 를 유지하는 옵션은 -o 입니다. 이 옵션은 root 권한이 있어야 적용 됩니다.


rsync -o src dest


r l p t g o D 옵션을 모두 모아 한꺼번에 적용하는 옵션은 -a 입니다.


rsync -a src dest


copy 되는 파일을 확인하는 옵션은 -v 입니다.


rsync -v src dest


가장 중요한 특정 파일이나 폴더를 제외하는 옵션은 --exclude 입니다.


rsync src dest --exclude=.git --exclude=.repo


이렇게 문구를 작성하면 .git 폴더의 내용과 .repo 의 변경사항은 무시하게 됩니다.





이런경우 외에서 출력되는 숫자를 사람이 읽기 좋게 바꾸어 주는 옵션은 -h 입니다.


rsync -h src dest


위 옵션들 중에 가장 많이 사용되는 것은 -avz 입니다. 위의 설명을 보면 알수 있듯이 -a 옵션은 대부분의 필요한 기능들을 포함하고 있기 때문입니다.


네트웍의 다른 컴퓨터에 내 로컬 PC의 내용을 백업하고 싶을 경우도 rsync 가 사용됩니다 기본적으로 rsync 는 ssh 를 사용하도록 되어 있습니다. 사용 예제는 아래와 같습니다.


rsync -avz ./src user@server:/target


이렇게 다양한 옵션으로 사용할 수 있는 rsync 외에도 더 많은 유용한 utility 들을 찾아 봐야겠네요.


이상 Ubuntu / Linux 에서 특정 파일/폴더 빼고 복사 하는 방법 (git folder 제외 하고 복사하기)에 대한 글 이였습니다.





Posted by 인포개더러
,