Resposta curta
find ./ -type f ! \( -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx \)
Resposta longa
Como parece mais fácil especificar o que queremos ( x tem y permissão) em find
, vamos tentar conjugar a expressão : podemos ver que um arquivo que deve corresponder a não tem todas essas condições verificadas:
- o usuário leu e escreveu
- o grupo leu e escreveu
- outro leu
- outro não tem (escreva ou execute)
Então agora temos mais que antes (5 vs 2). Eu escrevi o comando que acha que os arquivos que você faz não querem:
find ./ -type f -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx
Para entender isso, você deve se importar com o fato de que -
significa todas as permissões e /
significa qualquer uma das permissões .
Então eu juntei com ele! e parênteses para obter o comando no topo desta resposta.
Testes
Vamos criar arquivos que verificam apenas um de cada um desses critérios:
mkdir demo && cd demo
touch a b c d e f g
chmod 777 a b c d e f g
chmod u-r a
chmod u-w b
chmod g-r c
chmod g-w d
chmod o-r e
chmod o-w a b c d e g
chmod o-x a b c d e f
Então vamos criar todos os arquivos que não devem corresponder: Nós temos liberdades em
- direitos de execução do usuário
- direitos de execução de grupo
Que dá exatamente 2 ^ 2 = 4 tipos de permissões completas que não devem corresponder. Vamos criar 4 arquivos com estes critérios:
touch h i j k
chmod 664 h i j k
chmod u+x h i
chmod g+x h j
O comando fornecido deve corresponder aos arquivos a, mas não aos arquivos h a k. É claro que este teste não é completo porque existem 256 tipos de permissões para testar.