모든 사람이 실행할 수 있는 파일을 나열하는 대체 방법

모든 사람이 실행할 수 있는 파일을 나열하는 대체 방법

나는 현재 디렉터리와 모든 사람(소유자, 그룹, 기타)이 실행할 수 있는 하위 디렉터리의 파일 목록을 표시하기 위해 생각할 수 있는 모든 대안을 찾고 있습니다.

대안으로는 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자 세트에서 세 번째 문자는 소문자입니다(실제로는 일반적 -으로 또는 입니다. 일부 시스템에는 확장자가 있을 수 있지만 파일의 경우 실행 가능하다면 소문자로 만드세요).xslt

전체 경로가 아닌 파일 이름만 인쇄됩니다.

를 사용하면 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에서와 같이) 다음을 수행할 수 있습니다.***findfind

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: 재귀적입니다.

관련 정보