find, xargs 및 grep 조합에서 오류 발생

find, xargs 및 grep 조합에서 오류 발생

오류를 발생시키는 명령:

$ find /mydir/tmp/*20151014* -print | xargs grep -l 'filesTransmitted=1'
bash: /usr/bin/find: The parameter or environment lists are too long.

동일한 작업을 수행하는 가장 좋은 명령이 있습니까?

답변1

파일(디렉토리?) 이름의 확장자이고, /mydir/tmp/*20151014*이것이 바로 여기서 문제입니다.

쉘이 와일드카드 이름을 목록으로 확장할 필요가 없도록 다음을 시도해 보십시오.

find /mydir/tmp -name '*20151014*' -exec grep -l 'filesTransmitted=1' {} \;

귀하의 검색은 일치로 시작하는 파일 또는 디렉토리의 모든 파일을 검색하는 반면, 내 검색은 아래 어디에서나 /mydir/tmp/*20151014*일치하는 이름을 가진 모든 파일을 검색하기 때문에 귀하의 검색과 약간 다릅니다. 이것이 귀하의 요구 사항을 충족하지 않는 경우 제공하십시오.*20151014*/mydir/tmp견본파일 및 해당 디렉터리 경로의 모음입니다.

답변2

어쩌면 인수 목록이 너무 길 수도 있습니다. 이 페이지를 확인하세요:
http://www.cyberciti.biz/faq/argument-list-too-long-error-solution

getconf ARG_MAX매개변수에서 허용하는 최대 크기를 제공합니다.

최대 스택 값을 변경하고 ulimit -s현재 값을 표시한 후 ulimit -s (value)변경해 보세요. 을 사용할 수도 있습니다 ulimit -s unlimited.

이 기사를 모두 읽어보면 Linux 커널 2.6.32 이후에는 ARG_MAX 값이 동적으로 할당되고 ulimit -s 값을 기반으로 하는 것으로 보입니다.

관련 정보