[unix] 파일 이름 확장 (글 로빙)을 최대한 많이 하는가? 그렇다면 그렇다면 무엇입니까?

파일 이름 확장 (글 로빙)을 최대한 많이 하는가? 그렇다면 그렇다면 무엇입니까? tldp.org에서 globbing 을 참조하십시오 .

파일의 하위 집합에 대해 명령을 실행하고 싶다고 가정 해 봅시다.

grep -e bar foo*
rm -f bar*

bash가 확장 할 파일 수에는 제한이 있습니까? 그렇다면 무엇입니까?

이러한 작업을 수행하는 다른 방법을 찾고 있지 않습니다 (예 🙂 find.



답변

bashglob에 의해 확장 될 수있는 파일 수에는 사용 가능한 메모리 이외의 제한이 없습니다 .

그러나 이러한 파일이 (쉘 내장 또는 함수와 달리 ) 실행 되는 명령에 인수로 전달되면 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*


답변

다음을 사용하여 인수의 총 크기에 대한 제한을 볼 수 있습니다.

getconf ARG_MAX

이것은 일반적으로 쉘 이 아니라이 답변 에 따라 기본 운영 체제에 의해 결정 됩니다.


답변