원래 디렉토리에없는 대상 디렉토리의 파일을 삭제 하기 위해 --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/