Rechercher des répertoires et des fichiers avec des autorisations autres que 775/664

21

Je déplace un site Web d'un serveur à un autre et Git ne stocke pas de métadonnées telles que les autorisations de fichiers. J'ai besoin de trouver les répertoires et les fichiers qui ne sont pas respectivement 775/664.

En ce moment, j'utilise cet engin pavé:

$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'

Bien que cela fonctionne, je pense que c'est plutôt hacky. Y a-t-il une meilleure façon de le faire, peut-être une manière canonique, ou devrais-je simplement être pirate?

Cela fonctionne sur une version récente d'Ubuntu avec des outils GNU sous Bash.

dotancohen
la source

Réponses:

39

Utilisez le -permtest finden combinaison avec -not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775correspond à tous les fichiers avec des autorisations exactement égales à 775. -perm 664fait de même pour 664.
  • -not (booléen NON) annule le test qui suit, donc il correspond exactement à l'opposé de ce qu'il aurait: dans ce cas, tous les fichiers qui n'ont pas les autorisations appropriées.
  • -o(boolean OR) combine deux ensembles de tests ensemble, correspondant lorsque l'un ou l'autre le fait: il a la priorité la plus faible, il divise donc nos tests en deux groupes distincts. Vous pouvez également utiliser des parenthèses pour être plus explicite. Ici, nous faisons correspondre les répertoires avec des autorisations qui ne le sont pas 775et les fichiers ordinaires avec des autorisations qui ne le sont pas 664.

Si vous vouliez deux commandes distinctes pour les répertoires et les fichiers, coupez-les simplement en deux -oet utilisez chaque moitié séparément.

Michael Homer
la source
Magnifique merci! Je ne savais pas que deux conditions différentes pouvaient être définies (type -d et type -f par exemple) et je ne connaissais pas -perm.
dotancohen
Notez peut-être que ce -notn'est pas une norme POSIX; ils utilisent à la !place.
user1404316
2

Je n'ai aucune idée de ce que votre code essayait de réaliser. Normalement, la raison de rechercher des fichiers et des répertoires avec des autorisations incorrectes est dans le but de les modifier.

Voici donc ce que j'utilise avec succès dans Ubuntu 16.04

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

Cela démontre le! symbole échappé

NZ Dev
la source
En fait, l'objectif n'était pas de modifier les autorisations des fichiers, mais plutôt d'identifier les fichiers qui ont besoin d'autorisations flocon de neige lors de leur téléchargement sur un serveur Web de production. Merci.
dotancohen