
키워드를 검색하고 파일 내용에 키워드가 포함된 파일 이름을 인쇄할 수 있는 스크립트는 무엇입니까(예: 모든 하위 디렉터리의 모든 .sas 파일에 있는 "Carhart")? 다음과 같은 것을 시도했지만 작동하지 않습니다.
(find . -name '*.sas' -prune -type f -exec grep 'Carhart' > /dev/tty) >& /dev/null
이 스크립트는 두 가지 조건을 충족합니다.
- SPARC-Enterprise의 Solaris에서 tcsh에서 실행되며 POSIX 인증을 받았습니다.
- 검색 및/또는 읽기 권한이 없는 디렉토리에는 "권한 거부" 줄이 생성되지 않습니다. ( / -name '*.sas' -prune > /dev/tty 찾기) > & /dev/null
작업 시 권한 거부 오류가 보고되지 않으므로 ( find / -name '*.sas' -prune > /dev/tty ) > & /dev/null
이 간단한 줄을 수정하여 grep을 병합하려면 어떻게 해야 합니까 ?
답변1
grep이 파일 이름만 인쇄하도록 하려면 이 -l
옵션을 전달하십시오. 정규식 대신 하위 문자열을 검색하려면 이 -F
옵션을 전달하세요.
이름이 특정 패턴과 일치하는 파일을 반복적으로 검색하려면 find
with -type f
및 를 사용합니다. grep을 호출하는 데 사용됩니다.-name PATTERN
-exec
find . -name '*.sas' -type f -exec grep -F -l 'Carhart' {} +
순회를 허용하지 않는 디렉터리에서 발생하는 오류를 피하려면 , and (올바르게 얻기 어렵고 ACL이 있는 경우 작동하지 않음)를 사용하여 권한을 구문 분석하거나 호출 -perm
( 이것은 느리기 때문에 속도가 느림) 을 사용할 수 있습니다. 외부 프로그램이지만 더 안정적입니다).-user
-group
test
find . -type d ! -exec test -r {} -a -x {} \; -prune -o \
-name '*.sas' -type f -exec test -r {} \; -exec grep -F -l 'Carhart' {} +