Solaris 10에서 find를 사용하여 단일 디렉토리를 검색하지만 하위 디렉토리는 검색하지 않음

Solaris 10에서 find를 사용하여 단일 디렉토리를 검색하지만 하위 디렉토리는 검색하지 않음

find검색에서 하위 디렉토리를 제외하고 디렉토리의 내용을 나열하기 위해 Solaris 10에서 사용하려고 합니다 . 나는 다음을 기반으로 명령을 시도했습니다.sdaau가 제안한 솔루션:

find /tmp -type d ! -perm -u+rx -prune -o -type f -name dsm\*

안타깝게도 원하는 결과를 반환하는 것 외에도 여전히 다음과 같은 오류가 발생합니다.

find: cannot read dir /tmp/hsperfdata_oracle4: Permission denied
find: cannot read dir /tmp/hsperfdata_jsweb: Permission denied

/tmp에는 실행 사용자에게 find읽기 권한이나 통과(실행) 권한이 없는 여러 디렉터리가 있습니다.

-bash-3.2$ ls -ld /tmp/hsp*
drwxr-x---   2 jsweb    other        117 Jan  5 13:00 /tmp/hsperfdata_jsweb
drwxr-x---   2 oracle4  dba4         117 Nov  5 19:51 /tmp/hsperfdata_oracle4
drwxr-xr-x   2 root     root         117 Jan 22 08:58 /tmp/hsperfdata_root

find0이 아닌 반환 코드로 끝나지 않도록 이러한 오류를 제거하는 방법을 찾아야 합니다 . 내가 무엇을 간과하고 있습니까?

답변1

이러한 오류를 삭제하고 종료 상태를 무시할 수 있습니다.

find /tmp -name dsm\* -type f 2> /dev/null || :

여전히 stderr을 유지하고 find액세스 제한으로 인해 디렉터리를 입력하거나 나열할 수 없는 것 이외의 오류를 볼 수 있는 경우 이러한 권한 문제를 감지하는 구문을 사용해 볼 수 있지만 이는 까다로울 수 있습니다.

액세스 권한이 없는 디렉터리는 권한과 소유권(사용자 및 그룹)에 따라 달라집니다. 다음과 같은 것이 필요합니다.

export "PATH=$(getconf PATH):$PATH"
u=$(id -u) g=$(id -G | sed 's/ / -o -group /g'); IFS=" "
find /tmp -type d ! \( \
    -user "$u" -perm -u=rx -o \
    ! -user "$u" \( -group $g \) -perm -g=rx -o \
    ! -user "$u" ! \( -group $g \) -perm -o=rx \
  \) -prune -o -type f -name dsm\* -print

제가 테스트한 결과, Solaris 11에서는 find디렉토리를 정리하더라도 여전히 디렉토리를 읽을 수 없다고 불평할 것이며, Solaris 10에서는 아무것도 할 수 없습니다. 혼자 -prune그들에게 말해보세요 .

그래서 솔라리스는 find이 점에 있어서는 희망이 없어 보입니다. 대신 perl의 모듈을 사용할 수 있습니다 File::Find.

또한 위의 접근 방식은 ACL이나 기타 보안 제한 사항이 아닌 단순한 Unix 권한만 고려한다는 점에 유의하세요.

답변2

귀하의 예에서는 ! -perm -u+rx이는 사실로 평가되지 않습니다. 소유자는 여전히 권리를 갖습니다. ! -perm -o+rx따라서 다음을 사용해야 합니다 .

find /tmp -type d ! -perm -o+rx -prune -o -type f -name dsm\*

답변3

무엇을 달성하고 싶은지 확실하지 않지만 하위 디렉터리가 필요하지 않으므로 a를 실행 ls하고 파이프로 연결하면 어떨까요 grep? 어쩌면 당신이 사용하거나 당신의 필요를 충족시킬 수 awk있습니까 sort?

답변4

find /tmp -type d ! -perm -775 -prune -o -type f -name dsm\*

관련 정보