rsync : Backup. 다중 디렉토리 복사, 원본에서 삭제된 파일 지우기.

원본 파일이 여러 곳에 있는 경우

rsync 를 사용해서, 원본 파일이 여러 개이고 이 파일들을 한 디렉토리로 몰아서 복사하고자 할 때?
예를 들어 아래와 같은 경우.

# 원본 파일(디렉토리):
/repo/Music
/repo/Video
/repo/Radio
/repo/Story

# 복사본 디렉토리
/Backup

저 디렉토리들을 복사하면, 다음과 같은 디렉토리로 파일이 복사된다.

/Backup/Music
/Backup/Video
/Backup/Radio
/Backup/Story

이런 경우는 rsync 를 사용해서, 원본 디렉토리를 앞에 나열해주면 된다.

rsync -av <src1> <src2> <src3> <src...n> <dest>

즉,

rsync -av /repo/Music /repo/Video /repo/Radio /repo/Story /Backup

이렇게 명령을 내리면 됩니다.

원본 파일 구조가 다를 경우

위의 경우는 모두 원본은 /repo 아래에 있는 첫번째 디렉토리가 된다. 그런데, 만약, 다음과 같이 복사하고 싶다면?

/repo/Music
/repo/Video/Movie
/repo/Radio
/repo/Story

# 복사본 디렉토리
/Backup/Music
/Backup/Video/Movie
/Backup/Radio
/Backup/Story

이러면 좀 문제가 생긴다.

rsync -av /repo/Music /repo/Video/Movie /repo/Radio /repo/Story /Backup

이렇게 명령을 내리면..

/Backup/Music
/Backup/Movie
/Backup/Radio
/Backup/Story

이렇게 된다. /Backup/Video/Movie 를 원했지만, /Backup/Movie 가 돼 버렸다.

이를 위해선, -R(–relative) 를 사용해야 하고, 원본을 살짝 변형해줘야 한다.
즉, 복사하고자 하는 최상위 디렉토리에 ./ 을 삽입하여 원하는 디렉토리를 명시해줘야 한다.

./ 은 실제 디렉토리명이 아니고, -R 을 썼을 때 원하는 위치를 지정해주기 위해 임의로 넣어준 구분자이다.

rsync -avR /repo/./Music /repo/./Video/Movie /repo/./Radio /repo/./Story /Backup

위 명령 결과로, 다음과 같이 복사를 할 수 있게 된다.

/Backup/Music
/Backup/Video/Movie
/Backup/Radio
/Backup/Story

원본과 복제본 동일하게 유지

rsync 를 사용하여 백업을 하려고 할 때, 한가지 문제가 생길 수가 있다.
rsync -av 라면, 원본에서 파일이 삭제되었거나, 파일명이 바뀐 상황을 반영하지 못한다.

원본에서 삭제된 파일이 복사본엔 그대로 존재하며, 파일명을 바꿨을 경우(aa.txt 에서 bb.txt 로) 이전 파일(aa.txt)도 그대로 존재하고, 새 파일(bb.txt)도 복사되어 같은 파일이 두개가 있는 상황이 된다.

이를 방지하려면, --delete 를 사용하면 된다.

rsync -avuR --delete <src> ... <src..n> <dest>

** -u 옵션은 Update 를 뜻한다.

Tags:

안녕하세요. 글 남겨주셔서 고맙습니다.