Réponse courte
find ./ -type f ! \( -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx \)
Longue réponse
Comme il semble plus facile de spécifier ce que nous voulons ( X a y permission) dans find
, essayons de conjuguer l'expression: nous pouvons voir qu'un fichier qui devrait ne pas match a tout de ces conditions vérifiées:
- l'utilisateur a lu et écrit
- groupe a lu et écrit
- autre a lu
- autre n'a pas (écrire ou exécuter)
Alors maintenant nous avons plus a qu'auparavant (5 vs 2). J'ai écrit la commande qui trouve les fichiers que vous faites ne pas vouloir:
find ./ -type f -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx
Pour le comprendre, vous devez faire attention au fait que -
veux dire toutes les autorisations et /
veux dire l'une des autorisations .
Puis je l'ai conjugué avec! et parenthèse pour obtenir la commande en haut de cette réponse.
Des tests
Créons des fichiers qui vérifient un seul de chacun de ces critères:
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
Ensuite, créons tous les fichiers qui ne doivent pas correspondre:
Nous avons des libertés sur
- droits d'exécution de l'utilisateur
- droits d'exécution de groupe
Ce qui donne exactement 2 ^ 2 = 4 types d'autorisations complètes qui ne doivent pas correspondre.
Créons 4 fichiers avec ces critères:
touch h i j k
chmod 664 h i j k
chmod u+x h i
chmod g+x h j
La commande fournie doit correspondre aux fichiers a à e mais pas aux fichiers h à k. Bien entendu, ce test n’est pas exhaustif car il existe 256 types d’autorisations à tester.
-perm /u=rw,g=rw
vous permet d’obtenir tous les fichiers contenant l’un de ces indicateurs,!
-perm / u = rw, g = rw` vous permet d'obtenir les fichiers dans lesquels aucun de ces indicateurs n'est défini. Alors peut-être que tu veux!
-perm / u = rw, g = rw` (c'est-à-dire, pas {tous les indicateurs définis}, ce qui est identique à {au moins un indicateur non défini}.