쉘 스크립트에서 와일드카드 문자를 사용하여 삭제(rm)할 파일이 너무 많습니까?

쉘 스크립트에서 와일드카드 문자를 사용하여 삭제(rm)할 파일이 너무 많습니까?

디렉토리에서 숫자로 시작하는 모든 파일을 삭제해야 하는 쉘 스크립트가 있습니다. 이 파일 세트는 매일 삭제해야 하는 수십만 개의 파일을 포함하도록 성장했습니다. 스크립트에는 다음 줄이 포함되어 있습니다.

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

관련 정보