나는 현재 디렉터리와 모든 사람(소유자, 그룹, 기타)이 실행할 수 있는 하위 디렉터리의 파일 목록을 표시하기 위해 생각할 수 있는 모든 대안을 찾고 있습니다.
대안으로는 find 명령을 사용하지 않는 것을 의미합니다.
find -L . -type f -perm -111
find -L . -type f -perm -a=x
제가 보고 싶은 접근 방식 중 하나는 ls와 grep의 조합입니다.
답변1
ls
출력을 안정적으로 후처리할 수 없는 경우가 많습니다.
파일 이름에 개행 문자가 포함되지 않는다고 보장할 수 있는 경우 다음을 수행할 수 있습니다.
ls -AlLR ./| grep -E '^-(..[[:lower:]]){3}'
이것은 (일반 파일에만 해당)로 시작하는 인쇄 줄이며 권한 필드의 각 3자 세트에서 세 번째 문자는 소문자입니다(실제로는 일반적 -
으로 또는 입니다. 일부 시스템에는 확장자가 있을 수 있지만 파일의 경우 실행 가능하다면 소문자로 만드세요).x
s
l
t
전체 경로가 아닌 파일 이름만 인쇄됩니다.
를 사용하면 zsh
다음 작업도 수행할 수 있습니다.
printf '%s\n' **/*(D-.f+111)
또는:
printf '%s\n' **/*(D-.f:a+x:)
안에서부터 bash
:
zsh -c 'printf "%s\n" **/*(D-.f+111)'
심볼릭 링크의 경우 심볼릭 링크의 대상을 확인하고 싶기 때문에 접근 방식을 -L
사용 하고 있는 것 같습니다 . find
이것이 바로 위 로고의 목적입니다 -
.
find
그러나 s의 또 다른 부작용은 -L
디렉토리에 대한 심볼릭 링크로 연결된다는 것입니다. 위의 해결 방법 ls -LR
대신 동일한 상황이 발생합니다 . zsh
디렉토리에 대한 심볼릭 링크로 드롭다운하려면 다음으로 바꾸십시오. 디렉토리에 대한 심볼릭 링크로 드롭다운하지 않으려면 **
GNU 를 사용하여 (Ubuntu에서와 같이) 다음을 수행할 수 있습니다.***
find
find
find -L . \( ! -xtype l -o -prune \) -type f -perm -111
어쨌든, 이 모든 것은 권한만으로 모든 사람이 파일을 실행할 수 있지만 존재하지 않는 디렉터리에 있다는 점을 고려하지 못했습니다.검색 가능모두에 의해. ACL이나 기타 보안 조치가 적용되어 있으면 잘못된 결과가 나타날 수도 있습니다.
또한 고려검색 가능성경로 구성 요소에서는 다음을 수행할 수 있습니다.
find -L . \( ! -xtype l -perm -111 -o -prune \) -perm -111
(현재 작업 디렉토리 자체로 이어지는 모든 경로 구성요소도 월드 검색 가능하다고 가정)
답변2
ls
및를 사용하여 grep
:
ls -lAR | grep "^\-..x..x..x"
-l: rwx 형식으로 권한을 표시합니다.
-R: 재귀적입니다.