%EC%97%90%20%EC%B5%9C%EB%8C%80%EA%B0%92%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%EA%B7%B8%EB%A0%87%EB%8B%A4%EB%A9%B4%20%EA%B7%B8%20%EA%B0%92%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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
내장되어 있기 때문에( bash
Bourne과 유사한 대부분의 쉘에) 한계에 도달하지 않습니다 execve()
. 그리고 제한을 피하기 위해 xargs
인수 목록을 필요한 만큼의 호출로 분할합니다 .rm
execve()
와 함께 zsh
:
autoload zargs
zargs foo* -- rm -f
와 함께 ksh93
:
command -x rm -f foo*
답변2
다음을 사용하여 인수의 전체 크기에 대한 제한을 확인할 수 있습니다.
getconf ARG_MAX
이는 일반적으로 셸에 의해 결정되지 않고 다음 사항에 따라 기본 운영 체제에 의해 결정됩니다.이 답변.