기본적으로 find에서 "액세스 거부" stderr을 삭제합니다.

기본적으로 find에서 "액세스 거부" stderr을 삭제합니다.

find액세스 권한이 없는 디렉터리에 액세스하려고 할 때 나타나는 오류 메시지를 억제할 수 있는 옵션이 있습니까 ?

나는 stderr을 삭제할 수 있다는 것을 알고 있지만 문서에서 옵션을 찾지 못했지만 이를 수행하는 옵션이 존재하지 않는다고 믿을 정도로 명백한 필요성인 것 같습니다.

답변1

도착하다피하다권한 오류가 발생하면 find이러한 오류가 발생하지 않도록 해야 합니다. 액세스할 수 없는 디렉토리를 입력하지 않음으로써 이를 수행할 수 있습니다.

find현재 사용자가 읽을 수 없지만 GNU 스타일 로 깊게 들어가지는 않는 디렉토리의 경로 이름을 찾아 표시합니다 .

find / -type d ! -readable -prune

-prune작업은 검색 경로에서 현재 조사 중인 경로 이름을 제거합니다 find.

표준을 사용하면 및 find복잡한 방법을 결합하여 디렉터리 소유권을 기반으로 각 디렉터리의 권한을 테스트해야 합니다 . 몇 번 시도해 본 것 같은데 어렵네요.-perm-user-group

"기타" 권한 비트만 고려하세요.

find / -type d ! -user "$(id -u)" ! -group "$(id -g)" ! -perm -005 -prune

현재 사용자에게 속하지 않고, 현재 사용자의 그룹에 속하지 않으며, "다른 사람"이 읽거나(나열) 실행(입력)하는 것을 허용하지 않는 권한을 가진 디렉터리를 찾은 다음 해당 디렉터리를 제거합니다. 검색 경로에서.

모든 권한 비트를 테스트하는 완전한 것은 다음과 같습니다.

find / -type d \( \(   -user "$(id -u)"                     ! -perm -500 \) -o \
                  \( ! -user "$(id -u)"   -group "$(id -g)" ! -perm -050 \) -o \
                  \( ! -user "$(id -u)" ! -group "$(id -g)" ! -perm -005 \) \) -prune

-readable이는 ACL 등도 고려된다는 find점에서 GNU와 다릅니다 .-readable


도착하다버리다의 권한 오류는 find표준 오류 스트림을 로 리디렉션합니다 /dev/null.

답변2

오류 메시지를 표시하지 않는 옵션이 있는 명령은 거의 찾을 수 없습니다. 버리는 것이 사소한 것이기 때문이다.표준 에러와 같은 구조를 사용합니다 2>/dev/null.

특히 find그러한 옵션 자체는 없습니다.

관련 정보