원본 파일이 여러 곳에 있는 경우
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 를 뜻한다.