Bash 파일 이름 확장(와일드카드)에 최대 제한이 있습니까? 그렇다면 무엇입니까?

Bash 파일 이름 확장(와일드카드)에 최대 제한이 있습니까? 그렇다면 무엇입니까?

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인수 목록을 필요한 만큼 의 호출로 분할합니다 .rmexecve()

그리고 zsh:

autoload zargs
zargs foo* -- rm -f

그리고 ksh93:

command -x rm -f foo*

답변2

다음 명령을 사용하여 총 매개변수 크기에 대한 제한을 볼 수 있습니다.

getconf ARG_MAX

이는 일반적으로 셸에 의해 결정되지 않고 기본 운영 체제에 따라 결정됩니다.이 답변.

관련 정보