파일 이름 확장 (글 로빙)을 최대한 많이 하는가? 그렇다면 그렇다면 무엇입니까? tldp.org에서 globbing 을 참조하십시오 .
파일의 하위 집합에 대해 명령을 실행하고 싶다고 가정 해 봅시다.
grep -e bar foo*
rm -f bar*
bash가 확장 할 파일 수에는 제한이 있습니까? 그렇다면 무엇입니까?
이러한 작업을 수행하는 다른 방법을 찾고 있지 않습니다 (예 🙂 find
.
답변
bash
glob에 의해 확장 될 수있는 파일 수에는 사용 가능한 메모리 이외의 제한이 없습니다 .
그러나 이러한 파일이 (쉘 내장 또는 함수와 달리 ) 실행 되는 명령에 인수로 전달되면 execve()
일부 시스템 에서 시스템 호출 이 제한 될 수 있습니다. 대부분의 시스템에서 해당 시스템 호출에는 전달 된 인수 및 환경의 누적 크기에 대한 제한이 있으며 Linux에서는 단일 인수의 크기에 대한 별도의 제한도 있습니다.
자세한 내용은 다음을 참조하십시오.
이 한계를 극복하기 위해 다음을 사용할 수 있습니다 (GNU xargs
또는 호환 가능 하다고 가정 ).
printf '%s\0' foo* | xargs -r0 rm -f
위의 printf
내장 ( bash
대부분의 Bourne과 같은 쉘)이므로 execve()
한계에 도달하지 않습니다 . 그리고 xargs
인수 목록을 제한 rm
을 피하기 위해 필요한만큼 호출로 분할합니다 execve()
.
로 zsh
:
autoload zargs
zargs foo* -- rm -f
로 ksh93
:
command -x rm -f foo*