![쉘 스크립트에서 와일드카드 문자를 사용하여 삭제(rm)할 파일이 너무 많습니까?](https://linux55.com/image/174886/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%82%AD%EC%A0%9C(rm)%ED%95%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EB%84%88%EB%AC%B4%20%EB%A7%8E%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
디렉토리에서 숫자로 시작하는 모든 파일을 삭제해야 하는 쉘 스크립트가 있습니다. 이 파일 세트는 매일 삭제해야 하는 수십만 개의 파일을 포함하도록 성장했습니다. 스크립트에는 다음 줄이 포함되어 있습니다.
rm -f /my/dir/11*
rm -f /my/dir/12*
(( etc ))
rm -f /my/dir/1*
rm -f /my/dir/2*
각 줄마다 오류 메시지가 나타납니다.
line 1: /usr/bin/rm: Argument list too long
이 줄을 다음으로 바꾸려고했습니다.
ls -d /my/dir/11* | xargs rm
하지만 ls -d
나에게 같은 오류 메시지가 나타났습니다.
수백 개의 파일 이름 순열을 포함하도록 목록을 늘리지 않고 어떻게 이러한 파일을 삭제할 수 있습니까?
답변1
상대 경로를 가져와서 에 전달하려면 rm
다음 명령을 사용할 수 있습니다. find
사용 사례에 따라 다음 명령을 실행합니다.
find /my/dir -iname '[0-9]*' -type f
그러면 숫자로 시작하는 모든 파일이 반환됩니다. 목록을 삭제하려면 find
다음 명령을 사용하여 삭제하세요 -delete
.
find /my/dir -iname '[0-9]*' -type f -delete
행운을 빌어요!
답변2
쉘에 내장 printf
명령(예: Bash 또는 Dash)이 있는 경우 파이프할 수 있는 더 긴 인수 목록을 허용할 수 있습니다 xargs
.
printf '%s\0' /path/to/glob* | xargs -0 rm -f