bash 파일 이름 확장(globbing)에 최대값이 있습니까? 그렇다면 그 값은 무엇입니까?

bash 파일 이름 확장(globbing)에 최대값이 있습니까? 그렇다면 그 값은 무엇입니까?

bash 파일 이름 확장(globbing)에 최대값이 있습니까? 그렇다면 그 값은 무엇입니까? 보다글로빙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내장되어 있기 때문에( bashBourne과 유사한 대부분의 쉘에) 한계에 도달하지 않습니다 execve(). 그리고 제한을 피하기 위해 xargs인수 목록을 필요한 만큼의 호출로 분할합니다 .rmexecve()

와 함께 zsh:

autoload zargs
zargs foo* -- rm -f

와 함께 ksh93:

command -x rm -f foo*

답변2

다음을 사용하여 인수의 전체 크기에 대한 제한을 확인할 수 있습니다.

getconf ARG_MAX

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

관련 정보