rsync로 폴더를 이동할 때 빈 소스 디렉토리를 삭제하는 방법은 무엇입니까? 우수하게 이동할 수

rsyncmv다음 옵션을 사용하여 폴더를 기존 폴더와 매우 유사하고 우수하게 이동할 수 있습니다 .

rsync -axvvES --remove-source-files source_directory /destination/

그러나 내가 아직 할 수없는 한 가지는 원래 디렉토리를 제거하는 것입니다. --remove-source-files플래그는 소스 파일을 제거하지만 또한 소스 디렉토리 그냥 것을 않습니다. 나는 --remove-source-directories깃발도 있었으면 좋겠다 .

이 문제를 어떻게 처리 할 수 ​​있습니까? 나는 rm -fr이동 후 그냥 발행 할 수 있다고 생각 하지만 실수 가능성을 도입하는 대신 절차를 모두 한 프로세스로 유지하는 것을 선호합니다.



답변

나는 한 번에 그것을 수행하는 명령을 찾지 못했지만 rsync는 여전히 rm -rf(특히 많은 수의 디렉토리가있는 경우) 보다 여전히 성능이 우수하기 때문에 “move” 를 수행하는 두 개의 rsync 명령이 있습니다 .

rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/ && rmdir source/


답변

rm -rf “를 사용하면 고유 한 경쟁 조건이 있습니다. 즉, rsyncrm 호출 간에 방금 작성된 파일을 삭제할 수 있습니다 .

나는 사용하는 것을 선호합니다 :

rsync --remove-source-files -a server:incoming/ incoming/ &&
ssh server find incoming -type d -delete

디렉토리가 비어 있지 않으면 제거되지 않습니다.


답변

나는 비슷한 상황에 처하게되었다. rm -rfrsync가 일부 파일을 복사하지 못하여 파일을 잃고 싶지 않다는 것을 알고 피하고 싶었 습니다.

빈 디렉토리를 간단히 삭제하기 위해이 디렉토리가 가장 편리하다는 것을 알았습니다 sourcedir.

find . -type d -empty -delete


답변

rm -rf source_directory당신의 rsync 후에 추가하지 않습니까?

rsync -axvvES --remove-source-files source_directory /destination/ && rm -rf source_directory

각 명령 줄 프로그램은 특정 작업을 수행하기 위해 (아이디어) 만들어지며,보다 복잡한 작업을 수행하려면 여러 작업을 함께 수행해야합니다.


답변