액세스할 수 없는 디렉토리에 대해 오류가 없는 POSIX 호환 재귀 grep

액세스할 수 없는 디렉토리에 대해 오류가 없는 POSIX 호환 재귀 grep

키워드를 검색하고 파일 내용에 키워드가 포함된 파일 이름을 인쇄할 수 있는 스크립트는 무엇입니까(예: 모든 하위 디렉터리의 모든 .sas 파일에 있는 "Carhart")? 다음과 같은 것을 시도했지만 작동하지 않습니다.

(find . -name '*.sas' -prune -type f -exec grep 'Carhart' > /dev/tty) >& /dev/null

이 스크립트는 두 가지 조건을 충족합니다.

  1. SPARC-Enterprise의 Solaris에서 tcsh에서 실행되며 POSIX 인증을 받았습니다.
  2. 검색 및/또는 읽기 권한이 없는 디렉토리에는 "권한 거부" 줄이 생성되지 않습니다. ( / -name '*.sas' -prune > /dev/tty 찾기) > & /dev/null

작업 시 권한 거부 오류가 보고되지 않으므로 ( find / -name '*.sas' -prune > /dev/tty ) > & /dev/null이 간단한 줄을 수정하여 grep을 병합하려면 어떻게 해야 합니까 ?

답변1

grep이 파일 이름만 인쇄하도록 하려면 이 -l옵션을 전달하십시오. 정규식 대신 하위 문자열을 검색하려면 이 -F옵션을 전달하세요.

이름이 특정 패턴과 일치하는 파일을 반복적으로 검색하려면 findwith -type f및 를 사용합니다. grep을 호출하는 데 사용됩니다.-name PATTERN-exec

find . -name '*.sas' -type f -exec grep -F -l 'Carhart' {} +

순회를 허용하지 않는 디렉터리에서 발생하는 오류를 피하려면 , and (올바르게 얻기 어렵고 ACL이 있는 경우 작동하지 않음)를 사용하여 권한을 구문 분석하거나 호출 -perm( 이것은 느리기 때문에 속도가 느림) 을 사용할 수 있습니다. 외부 프로그램이지만 더 안정적입니다).-user-grouptest

find . -type d ! -exec test -r {} -a -x {} \; -prune -o \
       -name '*.sas' -type f -exec test -r {} \; -exec grep -F -l 'Carhart' {} +

관련 정보