나는 사용한다
find -type f -print0 | xargs -0 -n 10 grep -i searchstring
...재귀적으로 문자열을 검색합니다. 하지만 "권한이 거부되었습니다"와 같은 오류 메시지도 표시되었습니다. 이러한 오류 메시지를 피하고 결과만 볼 수 있는 방법은 무엇입니까?
답변1
표준 오류를 /dev/null로 리디렉션합니다. 즉
find -type f -print0 2>/dev/null | xargs -0 -n 10 grep -i searchstring 2>/dev/null
답변2
오류 메시지가 find에서 나오는 경우(예를 들어 탐색할 수 없는 디렉터리가 있기 때문에 해당 오류를 로 리디렉션합니다 /dev/null
.
find -type f -print0 2>/dev/null | …
오류 메시지가 grep에서 나오는 경우(예: 일부 파일을 읽을 수 없기 때문에) 해당 오류를 로 리디렉션 하거나 읽을 수 없는 파일을 무시하도록 지시하는 옵션을 /dev/null
전달합니다 .-s
xargs -0 grep -s -i searchstring /dev/null
그러나 항상 최소한 두 개의 파일을 볼 수 있도록 grep
추가해야 합니다 . 그렇지 않으면 파일 인수가 하나만 있는 경우 파일 이름이 출력에서 생략됩니다 . GNU grep 또는 Busybox(예: Linux 또는 Cygwin)의 경우 이 옵션을 사용할 수 있습니다 ./dev/null
grep
grep
-H
답변3
액세스 권한이 있는 디렉토리만 검색하고 읽을 수 있는 파일만 확인하려면 GNU find
(질문에 사용된 것)를 사용하여 만난 모든 디렉토리에 대한 액세스 및 읽기 권한이 있는지 -executable
테스트 할 수 있습니다. -readable
디렉터리에 대한 이러한 권한이 없으면 -prune
검색 트리에서 경로를 검색할 수 있습니다. 나머지 파일은 모두 테스트되어 -readable
읽을 수 있는지 확인됩니다.
이렇게 하면 "권한 거부" 오류가 발생하는 것을 방지할 수 있지만 발생할 수 있는 다른 오류는 숨기지 않습니다.생각하다확인하다:
find . \
-type d ! \( -readable -executable \) -prune -o \
-type f -readable -exec grep -F -i searchstring {} +
나는 grep
발견된 모든 파일에 대해 유틸리티를 호출하는 것을 피하기 위해 일괄적으로 일반 파일의 경로 이름을 제공합니다. 또한 정규식으로 해석되지 않는 것을 사용하여 쿼리가 수행되었음을 암시하기 위해 -F
with를 사용합니다.grep
searchstring