로컬에 있는 파일과 모델, 데이터 등을 리모트의 어딘가로 싱크하는 것은 데이터사이언스 작업을 하면서 빈번하게 있는 일입니다. 복잡한 파이프라인을 작성할 것은 아니기 때문에 간단하게 rsync를 사용할 때가 많습니다.
제가 주로 사용하는 옵션은 이렇습니다.
1 2 3 |
rsync -avzrub --delete /tmp/source /tmp/target |
그런데 이 옵션을 실행하다 보면 다음과 같은 에러가 나올 때가 있습니다.
1 2 3 |
rsync 'cannot delete non-empty directory' errors |
–delete 옵션은 소스에 없는 것들은 타겟에서도 지우라는 명령입니다. 이때 소스에 없는 파일과 디렉토리는 타겟에서도 지워야 하는데 디렉토리를 지우지 못하는 것입니다.
원인은 -b 옵션 때문인데 -b 옵션은 타겟에서 파일을 지욱 때 만약을 대비하기 위해 파일을 ~가 끝에 붙은 이름으로 변경해서 백업하는 기능입니다. 이 옵션으로 인해 지우지 못하게 됩니다.
-b 옵션을 제거하면 문제가 해결됩니다.
만약 그래도 백업을 해야 하고 특정 디렉토리는 다르게 관리해야 한다면 –exclude 옵션으로 그 디렉토리를 제외하고 그 디렉토리는 다른 옵션으로 rsync를 수행해야 합니다.