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


8

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

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

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

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


사용하지 않는 이유는 무엇입니까 mv?
Nils

1
볼륨이 다르므로 시간을 포함하여 모든 속성을 유지해야합니다.
ylluminate

1
여기에 unix.stackexchange.com/q/78375/3858이 필요합니다 .
Alix Axel

1
rsync가 특히 목적지 쪽에서 할 때 옵션이 없다는 것에 매우 놀랐습니다. 나는 find . -type d -empty | xargs rmdir -p
끝났어

@ Sridhar-Sarnobat 알다시피 rsync세션 에서 결과를 목록으로 전달한 다음 프로세스를 따라 처리 한 다음 정리 하는 방법이 있는지 궁금 합니다 ... 흠.
ylluminate

답변:


4

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

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

5

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

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

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

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


분명히 -depthOSX 또는 기타 를 추가해야 할 수도 있습니다.
Charlie Gorichanaz

3

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

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

find . -type d -empty -delete

그래, 최근에 알게 된 -empty에 대해 선의를 가져 주셔서 감사합니다.
Sridhar Sarnobat가

2

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

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

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


2
내 생각 엔 당신이 맞다. 나는 rsync가 정상적으로 작동하는 방식으로 움직이지 않기 때문에 궁극적으로 맨 아래로 드릴 다운해야한다고 생각합니다. 아마 사용할 필요가 있습니다 find -depth. dir 스택의 맨 아래로 내려 가고 rsync로 mv를 기록하고 메모 한대로 rm을 수행 한 다음 트리를 다시 올리는 알고리즘에 대한 빠른 접근 방법에 대한 제안이 있습니까?
ylluminate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.