Bash 파일 이름 확장(와일드카드)에 최대 제한이 있습니까? 그렇다면 무엇입니까? 바라보다와일드카드tldp.org에서
파일의 하위 집합에 대해 명령을 실행하고 싶다고 가정해 보겠습니다.
grep -e bar foo*
rm -f bar*
Bash가 확장할 수 있는 파일 수에 제한이 있나요? 한계가 있다면 얼마나 됩니까?
나는 이러한 작업을 수행하는 다른 방법(예: 사용)을 찾고 있지 않습니다 find
.
답변1
glob이 확장할 수 있는 파일 수(사용 가능한 메모리 제외)에는 제한이 없습니다 bash
.
그러나 이러한 파일이 명령에 인수로 전달되면처형된(셸 내장 기능이나 함수와는 반대로) execve()
일부 시스템에서는 시스템 호출 제한이 발생할 수 있습니다. 대부분의 시스템에서 이 시스템 호출에는 전달된 인수 및 환경의 누적 크기에 대한 제한이 있으며 Linux에서는 개별 인수의 크기에 별도의 제한이 있습니다.
자세한 내용은 다음을 참조하세요.
이러한 제한을 해결하려면 다음을 사용할 수 있습니다(GNU xargs
또는 호환 가능하다고 가정).
printf '%s\0' foo* | xargs -r0 rm -f
위에서는 printf
(Bourne과 유사한 대부분의 쉘에) 내장되어 있으므로 bash
한계에 도달하지 않았습니다 execve()
. 제한을 피하기 위해 xargs
인수 목록을 필요한 만큼 의 호출로 분할합니다 .rm
execve()
그리고 zsh
:
autoload zargs
zargs foo* -- rm -f
그리고 ksh93
:
command -x rm -f foo*
답변2
다음 명령을 사용하여 총 매개변수 크기에 대한 제한을 볼 수 있습니다.
getconf ARG_MAX
이는 일반적으로 셸에 의해 결정되지 않고 기본 운영 체제에 따라 결정됩니다.이 답변.