HP-UX의 여러 파일에서 문자열 검색

HP-UX의 여러 파일에서 문자열 검색

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파일 이름이 항상 인쇄되는지 확인하세요(또 다른 보너스).

주목할만한 차이점 중 하나는 파일 목록이 정렬되지 않는다는 것입니다.

관련 정보