경고 건너뛰기

경고 건너뛰기

나는 이것이 "권한"이 포함된 경고를 건너뛸 것이라고 생각했습니다.

$ find / -iname "*mysql*" | grep -v "Permission"
find: /.DocumentRevisions-V100: Permission denied
find: /.fseventsd: Permission denied
find: /.Spotlight-V100: Permission denied
find: /.Trashes: Permission denied

그러나 그것은 진실이 아니다. 어떤 제안이 있으십니까?

이에 비해 예상대로 작동합니다.

$mkdir foo
$ls | grep -v "foo"

답변1

경고는 find오류 스트림, STDERR, 파일 설명자 2에 표시되지만 파이프를 사용하면 STDOUT(파일 설명자 1)만 리디렉션하고 사용하므로 grep메시지가 계속 표시됩니다.

해결책:

경고에 관심이 없으므로 STDERR을 다음으로 리디렉션하십시오 /dev/null.

find / -iname "*mysql*" 2>/dev/null

반드시 사용해야 한다면 grepSTDOUT 및 STDERR을 전달한 후 다음 명령을 사용하십시오 grep -v "Permission".

쉘이 다음을 지원하는 경우 |&:

find / -iname "*mysql*" |& grep -v "Permission"

POSIX 스타일:

find / -iname "*mysql*" 2>&1 | grep -v "Permission"

참고로 경고의 출처를 확인하세요. 루트가 아닌 사용자로 실행할 수 있으므로 권한 문제가 있을 수 있습니다. 이 문제를 해결하려면 다음 계정으로 명령을 실행 find하거나 root이에 따라 검색을 제한하세요.

답변2

find대부분의 다른 유틸리티와 마찬가지로 이 유틸리티는 다음 위치에 오류 메시지를 기록합니다.표준 오류 스트림.

파이프라인이 리디렉션됩니다표준 출력 스트림하지만 오류 스트림 findgrep여전히 ​​콘솔로 이동합니다.

오류 스트림을 리디렉션하려면 find다음을 사용하세요 2>&1( grep이는 "정상 출력이 진행되는 곳마다 오류 보내기"를 의미함).

find / -iname "*mysql*" 2>&1 | grep -v "Permission"

그러나 당신 이후로아마도오류가 사라지기를 원하면 다음을 사용하십시오.

find / -iname "*mysql*" 2>/dev/null

find이로 인해 오류가 비트버킷 /dev/null(채워지지 않는 장치 파일) 으로 흘러 들어가게 됩니다 .

답변3

경고는 리디렉션되지 않습니다. 이것은 도움이 될 것입니다:

find / -iname "*mysql*" 2>/dev/null | grep -v "Permission"

비록 당신은 그럴 수 있지만생각하다"권한" 이외의 경고를 참조하세요.

find / -iname "*mysql*" 2>&1 | grep -v "Permission"

관련 정보