한 번에 매우 많은 수의 파일을 삭제하려고하면 (오늘 485,000+ 이상의 디렉토리를 삭제 한 경우) 다음 오류가 발생할 수 있습니다.
/bin/rm: Argument list too long.
문제는 당신이 무언가 같이 입력 할 때이다 rm -rf *
의는 *
"RF RM은 파일 1 파일 2 파일 3 file4"등등과 같은 모든 일치하는 파일의 목록으로 대체됩니다. 이 인수 목록을 저장하기 위해 할당 된 비교적 작은 메모리 버퍼가 있으며, 채워지면 쉘은 프로그램을 실행하지 않습니다.
이 문제를 해결하기 위해 많은 사람들이 find 명령을 사용하여 모든 파일을 찾고 다음과 같이 "rm"명령으로 하나씩 전달합니다.
find . -type f -exec rm -v {} \;
내 문제는 500,000 개의 파일을 삭제해야하고 너무 오래 걸리는 것입니다.
파일을 삭제하는 훨씬 빠른 방법을 발견했습니다.“find”명령에는“-delete”플래그가 내장되어 있습니다! 내가 사용한 결과는 다음과 같습니다.
find . -type f -delete
이 방법을 사용하여 초당 약 2000 파일의 속도로 파일을 삭제했습니다.
파일 이름을 삭제하면서 파일 이름을 표시 할 수도 있습니다.
find . -type f -print -delete
… 또는 삭제할 파일 수를 표시 한 다음 삭제하는 데 걸리는 시간도 표시합니다.
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s