Descobri que sudo -u <user> test
pode funcionar, mas não tenho o comando sudo no meu sistema.
Por exemplo
/a d......--x
/a/aa d......--x YES
/b d......---
/b/bb d......--x NO
Quando uso o usuário root, não consigo usar o test
comando para determinar as permissões para "outros". Perguntas relacionadas que encontrei: Teste as permissões efetivas do arquivo para o usuário
Veja como você faz isso:
! -perm -o=x -prune
- não desça para diretórios que não possuem bit de execução para "outros".-print
no final, os diretórios removidos (aqueles quefind
não descem, ou seja, aqueles que não possuem bit de execução para "outros") também seriam impressos. O explícito-print
garante que SOMENTE os diretórios encontrados no lado direito (após a remoção) sejam impressos.Agora, este comando seria o mais óbvio. No entanto, existem maneiras de torná-lo muito mais curto, realizando algumas reduções lógicas.
Em primeiro lugar, se você pensar bem, não precisa do segundo
-perm -o=x
; Se o primeiro! -perm -o=x
for avaliado como "True" (ou seja, não há bit de execução na pasta), ele nem chegará ao lado direito após o-o
(já que logicamente, toda a expressão seria avaliada como "True" após verificar o primeira condição). Isso significa que toda a seção entre parênteses só será avaliada se houver um bit de execução para outros no arquivo.Resumindo, a
-perm -o=x
parte entre parênteses é redundante e pode ser removida.Agora, como eu disse, a razão pela qual precisamos do
-print
no final é porque-prune
a ação retorna "True" e não queremos imprimir esses diretórios removidos. No entanto, podemos inverter o "True" apenas adicionando!
antes do-prune
; Essas pastas ainda serão removidas, mas o resultado seria "Falso", portanto não seriam impressas de qualquer maneira.E então não precisamos
-print
mais do final.E como eu disse, você pode remover os parênteses. E é assim que você finalmente chega a:
Comando final abreviado: