![삭제할 모든 파일 목록을 먼저 생성하지 않고도 수백만 개의 파일을 효율적으로 삭제합니다.](https://linux55.com/image/167866/%EC%82%AD%EC%A0%9C%ED%95%A0%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%20%EB%AA%A9%EB%A1%9D%EC%9D%84%20%EB%A8%BC%EC%A0%80%20%EC%83%9D%EC%84%B1%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%EB%8F%84%20%EC%88%98%EB%B0%B1%EB%A7%8C%20%EA%B0%9C%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%82%AD%EC%A0%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
저는 마운트된 NAS 드라이브에서 수백만 개의 파일을 삭제하는 방법을 알아내려고 노력해 왔습니다. 내가 액세스하는 운영 체제는 RHEL 7.6입니다.
이 디렉토리에는 매일 수만 또는 수십만 개의 추가 파일이 활발하게 기록되고 있습니다.
예를 들어 제거 기술을 실행하려고 하면 다음과 같습니다.
rsync -av --delete empty_dir/ millions_of_files_dir/
먼저 CPU/MEM을 많이 사용하며 "델타 파일 목록을 보내는 중입니다"라는 메시지가 표시됩니다. 이는 영원히 지속되며 CPU/MEM 사용량은 서서히 최소로 감소합니다.
내 이론은 파일 목록이 끝나지 않기 때문에 이런 일이 발생한다는 것입니다. 수많은 파일이 추가됩니다.
SO: 삭제하기 전에 파일의 전체 목록을 요구하지 않지만 파일이 발견되면 "스트림 삭제"하는 삭제 기술이 있습니까?
답변1
find
옵션 과 함께 명령을 사용하면 -delete
전체 목록을 작성하지 않고 파일을 발견하면 제거됩니다.
find . -type f -delete # deletes all files in the current dir and all subdirs
대부분의 Linux 파일 시스템은 단일 디렉토리에 너무 많은 파일이 있으면 제대로 작동하지 않는다는 점에 유의하는 것이 중요합니다. "완전한" 목록이 작성되지 않은 경우에도 디렉토리의 내용을 나열해야 하므로 디렉토리에 수백만 개의 파일이 포함되어 있으면 성능이 좋지 않습니다.