한 폴더 내에 10만장 정도의 파일이 있었는데 이를 전부 삭제하고자 흔히 쓰는 rm -rf *를 사용하였지만
-bash: /bin/rm: Argument list too long 해당 오류가 발생했다.
이는 이전에 많은 양의 이미지를 한번에 옮길 때도 발생했던 문제였고 아래 포스팅으로 정리까지 해뒀기에 해당 오류 메세지가 익숙했다.
https://iambeginnerdeveloper.tistory.com/177?category=916615
하지만 이동과 삭제는 다른 문제였기에 꼼수를 쓸 수가 없어 구글링을 했는데 나는 죄다 안먹혔다..
find . -exec rm {} \;
find . -name '*.txt' | xargs rm *
find . -name '*' -print0 | xargs -0 rm
구글링해서 나오는 find 명령어를 이용한 방법들을 위와 같다.
보다시피 나는 3가지 전부 해결되지 않았다. 해당 폴더 내에는 txt파일만 있었기 때문에 '.'이 안되었던걸까..? (directory라고 못 지운다고 하니...그렇게 유추 해 봄...)
그래서 좀 더 구글링 하다가 발견한 find 명령어로 해결을 했다.
find . -maxdepth 1 -name '*.txt' -delete
https://stackoverflow.com/questions/11289551/argument-list-too-long-error-for-rm-cp-mv-commands
여기서 find 명령어를 사용하되 -exec rm {} 대신 -maxdepth 1 -delete를 사용하면 된다고 해서 해봤는데 10만장이 깔끔하게 삭제되었다!!!!
이는 외부 프로세스를 사용하지 않고 필요한 시스템 호출을 간단하게 실행할 수 있어 더 빠르다고 한다.
또, xargs를 사용하여 삭제를 하게 되면 파일이 깨지거나 하는 위험이 있기 때문에 추천하지 않는다고 한다.
해결법 : find . -maxdepth 1 -name '*.txt' -delete