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


11

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

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

grep -e bar foo*
rm -f bar*

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

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



2
다음을 참조하십시오 : 명령 단일 인수의 최대 크기는 무엇입니까? 현재 Linux 시스템에서는 단일 인수의 크기와 총 크기에 대해 서로 다른 제한이 있습니다. 후자는 스택 크기 제한에 따라 다릅니다.
ilkkachu

답변:


17

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*

7

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

getconf ARG_MAX

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


2
숫자가 아닌 총 길이라고 생각합니까?
ilkkachu

1
물론 정확합니다. 이것을 반영하여 답변을 업데이트했습니다. 이 때문에 인수 수에 대한 제한은 인수 길이의 함수가 됩니다.
DopeGhoti
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.