Rsync –delete 옵션은 대상 디렉토리의 파일을 삭제하지 않습니다 삭제 하기

원래 디렉토리에없는 대상 디렉토리의 파일을 삭제 하기 위해 --delete옵션 을 사용하려고합니다.rsync

내가 사용하는 명령은 다음과 같습니다.

rsync -avz --ignore-existing --recursive --delete /var/www/* root@mydomaintest.com:/var/www

그래서 내 질문은, 원래 디렉토리에없는 대상 디렉토리의 모든 파일을 어떻게 삭제할 수 있습니까?



답변

이 명령을 사용하십시오 :

rsync --archive --verbose --compress --ignore-existing --delete /var/www/ root@mydomaintest.com:/var/www

“*”가 필요하지 않으며 사용하지 않아야합니다.

파일 또는 디렉토리를 제외 / 포함하려면 다음 매개 변수를 사용해야합니다.

--exclude 'to_exclude*'
--include 'to_include*'

답변

사용할 때 명령이 작동하지 않았습니다. /var/www/*소스 쉘이 그루브를 수행 쉘이 *해당 디렉토리의 모든 파일로 확장 하고 파일을 하나씩 복사 개별 파일이 아닌 소스가되었습니다. 부모 디렉토리

따라서를 사용하는 경우 파일을 포함하는 상위 디렉토리가 아닌 파일이 내용과 함께 디렉토리와 함께 복사되도록 옵션이 /var/www/*필요하지 않습니다 . 소스에없는 대상 디렉토리 에서 파일을 제거 하는 것과 동일한 이유로 작동 하지 않습니다.--recursive*--delete--delete 디렉토리를 ,하지만 당신은 제거되지 파일 (예상대로) 그래서 파일을 복사합니다.

이렇게하면 더 명확 해집니다.

/foo$ ls -l
-rw-rw-r-- 1 user user    0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user    0 Apr 16 17:56 spam
drwxrwxr-x 2 user user 4096 Apr 16 18:14 test


/bar$ ls -l
-rw-rw-r-- 1 user user 0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user 0 Apr 16 18:13 lion
-rw-rw-r-- 1 user user 0 Apr 16 17:56 spam


$ rsync -avz --ignore-existing --recursive --delete
/foo/* /bar/

+ rsync -avz --ignore-existing --recursive --delete
/foo/egg /foo/spam /foo/test /bar/

sending incremental file list
test/
test/hello

sent 173 bytes  received 39 bytes  424.00 bytes/sec
total size is 0  speedup is 0.00


/bar$ ls -l
-rw-rw-r-- 1 user user    0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user    0 Apr 16 18:13 lion
-rw-rw-r-- 1 user user    0 Apr 16 17:56 spam
drwxrwxr-x 2 user user 4096 Apr 16 18:14 test

보시다시피, 소스를 사용 /foo/*했으므로rsync 실행중인 명령이

rsync -avz --ignore-existing --recursive --delete /foo/egg
/foo/spam /foo/test /bar/

* 만드는 쉘을 확장하고 전체가 아닌 상위 디렉토리 소스 인수, 개별적으로 모든 파일을 (당신은 또한 필요하지 않습니다 --recursive이 경우).

따라서 --delete작업하려면 다음과 같이 실행하십시오.

rsync -avz --ignore-existing --recursive --delete
/var/www/ root@mydomaintest.com:/var/www/