1,300만 개 이상의 파일이 있는 디렉토리가 있고 mtime을 기반으로 그 중 일부를 삭제하고 싶습니다. 이 작업을 효율적으로 수행하는 방법은 무엇입니까? ext4에 있습니다.
답변1
아마도 다음보다 더 효율적인 것을 얻지 못할 것입니다.
find /dir -type f -mtime +6 -delete
7일(예, 6일이 아닌 7일)이 지난 파일을 삭제합니다.
어떤 경우든 lstat()
각 파일에 대해 시스템 호출을 수행하여 마지막 수정 시간을 확인해야 합니다. 파일 삭제( unlink()
디렉토리에서 파일 제거)는 디렉토리 내용 편집, 디렉토리 수정 시간 업데이트, inode에서 파일 링크 수 업데이트, 블록/범위 할당 정보 업데이트가 필요하기 때문에 비용이 많이 듭니다.
(GNU 확장)을 사용하는 것은 별도의 유틸리티를 호출할 필요 없이 직접 수행 -delete
할 수 있으므로 매우 효율적입니다 . 이라는 뜻 이지만 성능에는 큰 영향을 미치지 않을 것 같습니다.unlink()
find
rm
-depth