최근에 나는 많은 수의 파일(100만 개 이상)을 삭제해야 했고 이를 위해 다음 내용을 읽었습니다.
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
이는 가장 최적화된 방법 중 하나이며 rm -rf
.
나는 이것에 대한 전문가는 아니지만 rsync의 성능에 대한 이유는 파일을 나열하는 방식과 관련이 있다고 이해합니다(내 생각에는 FIFO가 아닌 LIFO). 이제 문제는 효율적인 방법으로 많은 파일을 이동해야 한다는 것입니다. 몇 가지 검색 끝에 다음을 발견했습니다.
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
이동한 내용은 모두 삭제되지만문서에서는 ~/source
디렉토리가 그대로 유지됩니다. 숫자가 1에 매우 가까운 "루프"와 유사한 디렉터리 구조가 있으므로 files/directories
디렉터리를 완전히 삭제하려면 첫 번째 명령을 다시 실행해야 합니다.
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
교정은 mv
거의 즉시 완료되지만 내 ~/destination
디렉토리에 보존해야 할 파일이 있으므로 이는 mv
옵션이 아닙니다. --prune-empty-dirs
및 rsync 옵션을 찾았 --force
지만 둘 다 예상대로 작동하지 않는 것 같습니다.
--force force deletion of directories even if not empty
--prune-empty-dirs prune empty directory chains from the file-list
--remove-source-files sender removes synchronized files (non-dirs)
흉내낼 방법 없을까이동하다rsync를 일회성으로 사용하시겠습니까?
답변1
zany의 의견부터 slm의 답변까지(rsync를 사용하여 파일을 이동하고 디렉터리를 삭제하시겠습니까?) 답변으로 다음 두 명령을 추천합니다.
rsync -av --ignore-existing --remove-source-files source/ destination/ && \
find source/ -depth -type d -empty -exec rmdir "{}" \;
장점은 zany가 말했듯이 rm -rf를 올바르게 사용하지 않거나 초보자가 사용할 경우 여전히 위험이 있다는 것입니다.
-length 및 -empty라는 두 가지 옵션을 추가했습니다. 이것이 실제로 필요한지는 잘 모르겠지만 두 번째 명령을 더 이식 가능하게 만들고 다른 경우에도 더 안전하게 만듭니다(일부 디렉토리가 비어 있지 않고 여전히 올바른 작업을 수행하는 경우). 것) 디렉토리 트리의 가장 깊은 지점부터 삭제를 시작합니다)
답변2
stackoverflow에서 다음과 같은 제목의 게시물을 찾았습니다.rsync "이동"을 사용하여 폴더를 삭제하시겠습니까?, 이는 본질적으로 동일한 질문을 하는 것입니다. 답변 중 하나는 rsync
파일 및 소스 디렉터리의 이동/삭제를 수행할 수 있는 단일 명령이 없는 것 같기 때문에 in 2 명령 실행을 제안했습니다.
$ rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/ && rmdir source/
또는 다음 명령을 사용하여 이 작업을 수행할 수 있습니다.
$ rsync -axvvES --remove-source-files source_directory /destination/ && \
rm -rf source_directory
이상적이지는 않지만 작업을 완료합니다.