sh 및 시스템 명령만 사용해야 합니다(Perl은아니요옵션).
일부 파일의 경우 이 명령이 제대로 작동합니다.
# grep -l word *
file 1
file1
하지만 270,000개의 파일이 있으면 다음 오류가 발생합니다.
# grep -l word *
sh: /usr/bin/grep: The parameter list is too long.
HP-UX에서는 이 xargs
명령에 이 옵션이 없으므로 -0
사용할 수 없습니다.
# find . -print0 |xargs -0 grep -l
xargs: unknown option: -0
어떤 명령을 사용할 수 있는지 아시나요?
답변1
find
다음과 같이 명령의 변형을 사용할 수 있습니다 .
find . -type f -exec grep -l word {} \;
답변2
HP-UX 버전이 충분히 최신인 경우 find
이 -exec … +
작업을 사용하여 호출할 수 있습니다. 이는 xargs
명령줄 길이 제한을 초과하지 않고 한 번에 여러 일치하는 파일에 대해 명령을 호출하는 것과 동일한 작업을 수행하지만 모든 파일 이름에 대해 안정적인 방법입니다.
find . -type f -exec grep -l word {} +
HP-UX 버전 이 너무 오래된 경우 에는 -exec … \;
.-exec … +
;
find . -type f -exec grep -l word {} \;
파일 이름에 \"'
공백이 포함되어 있지 않으면 xargs
이 옵션을 사용할 필요가 없습니다 -0
.
find . -type f -print | xargs grep -l word
답변3
grep -l word ./*
인수 크기 제한을 피하기 위해 필요에 따라 파일 목록을 분할하는 것과 유사한 가까운 POSIX의 경우 execve()
다음을 수행할 수 있습니다.
find -L . ! -name . -prune ! -name '.*' -type f -exec \
grep -l word /dev/null {} +
! -name . -prune
하위 디렉터리로 재귀적이지 않습니다.-L
일반 파일에서만 검색하는 것과 함께 사용됩니다(심볼릭 링크 분석 후)(-type f
이는 모든 종류의 파일을 찾는 방법에 비해 이점입니다).grep ... ./*
! -name '.*'
./*
숨겨진 파일 제외/dev/null
파일 이름이 항상 인쇄되는지 확인하세요(또 다른 보너스).
주목할만한 차이점 중 하나는 파일 목록이 정렬되지 않는다는 것입니다.