find 명령을 아는 사람이라면 이 질문이 간단해 보일 수도 있습니다. 하지만 find 명령이 내 시스템에서 작동하지 않는다고 가정해 보겠습니다. "find" 명령을 사용하지 않고 권한에 따라 파일을 보려면 어떻게 해야 합니까?
답변1
그렇지 않은 경우 find
여전히 쉘(와일드카드를 확장할 수 있음)이 있고 디렉토리의 내용을 반복하여 먼저 각 파일이 파일인지 확인한 다음 쓰기 가능하지 않은지 확인한 다음 실행 가능하지 않은지 확인한 다음 다음을 확인할 수 있습니다. 실행 가능한 읽기입니다.
누군가 시연을 위해 스크립트를 작성할 수도 있지만 문서를 읽는 것부터 시작하는 것이 도움이 될 것입니다.POSIX 테스트.
그건 그렇고, "를 사용하십시오오직"는 질문 제목에 쓰기 가능하거나 실행 가능한 파일을 제외합니다."POSIXfind
, 다음과 같이 표현할 수 있습니다.
find . -type f \! \( -perm -u=w -o -perm -u=x -o -perm -g=w -o -perm -g=x -o -perm -o=w -o -perm -o=x \)
암소 비슷한 일종의 영양find
보다 간결한 표현을 허용하는 확장이 제공됩니다.
find . -type f \! -perm /u=wx,g=wx,o=wx
이 test
유틸리티( [
및 로 더 일반적으로 사용됨)는 예를 들어 ]
다음과 같은 간단한 테스트를 제공합니다 .find
for name in *; do [ -f "$name" -a -r "$name" -a ! -w "$name" -a ! -x "$name" ] && ls -l "$name"; done
그러나 해당 권한은 다음에만 적용됩니다.사용자, 아니요그룹또는다른. 이를 기반으로 파일을 제외하려면 다음을 사용할 수 있습니다 ls
.
for name in *; do [ -f "$name" ] && case "$(ls -l "$name")" in -r--r--r--*) echo "$name";; esac; done
또는 (실행 파일을 허용하려는 경우)
for name in *; do [ -f "$name" ] && case "$(ls -l "$name")" in -r-?r-?r-*) echo "$name";; esac; done
답변2
ls -l
다음과 함께 사용할 수 있습니다 grep
.
ls -l | grep -e "-r[w-][x-][r-][w-][x-][r-][w-][x-]"
읽기 권한이 있는 파일만 표시됩니다. 패턴 시작 부분에 대시 대신 추가 하면 [-d]
목차도 표시됩니다.
답변3
당신은 그것을 사용할 수 있습니다,
# for file in /your/path/*; do [ -r "$file" ] && [ -f "$file" ] && printf '%s\n' "$file"; done
-r
파일이 존재하고 읽기 권한이 부여되었음을 나타냅니다.
소유자, 그룹, 기타 여부에 관계없이 읽을 수 있는 파일을 찾으려면 r
ls의 파일 권한 열에서 플래그를 확인하면 됩니다.
ls -l | awk '$1 ~ /r/'
답변4
그리고 zsh
:
view ./*(.^f-444)
또는:
view ./*(.r,.A,.R)
하나 이상의 읽기 권한 비트가 설정된 숨김되지 않은 일반 파일이 표시됩니다. 다음과 동일:
find . ! -name . -prune ! -name '.*' -type f \(
-perm -001 -o -perm -010 -o -perm -100 \)
또는 GNU를 사용하십시오 find
:
find . -maxdepth 1 ! -name '.*' -type f -perm /444
하지만:
view ./*(.e:'[ -r $REPLY ]':)
숨겨지지 않은 일반 파일을 봅니다.너읽기 권한이 있습니다. 다음과 동일:
find . ! -name . -prune ! -name '.*' -type f -exec test -r {} \; -print
또는 GNU를 사용하십시오 find
:
find . -maxdepth 1 ! -name '.*' -type f -readable
그리고:
view ./*(.f-7333^f-444)
읽기 권한 비트만(하나 이상) 설정되어 있는 숨겨지지 않은 일반 파일을 봅니다.
GNU에 해당 find
:
find . -maxdepth 1 ! -name '.*' -perms /444 ! -perms /7333