Je faisais un changement récursif de masse des autorisations de certains fichiers que j'avais migrés vers un système Unix. Je les ai changés en ug + rw, mais j'ai découvert que je ne pouvais pas parcourir les sous-répertoires. J'ai regardé la page de manuel chmod
et je n'ai vu aucune explication pour exclure les répertoires, j'ai donc fait une petite recherche sur Google et j'ai constaté que les gens find
modifiaient récursivement les autorisations sur les répertoires pour `` exécuter '' pour l'utilisateur et le groupe. Je l'ai fait et ensuite j'ai pu les examiner.
Mais il me semblait que je devrais pouvoir faire cette recherche chmod
- changer récursivement les fichiers en lecture / écriture mais pas rendre les répertoires intraversables. Ai-je fait cela de la bonne manière ou existe-t-il une manière plus simple de le faire?
la source
find
pour définir toutes les autorisations de fichiers sur 600 et toutes les autorisations de répertoire sur 700. (Je suis arrivé ici via mes googlings sur le sujet.) Si cela peut être fait avec une seulechmod -R
commande, n'hésitez pas à me corriger.chmod -R u=rwX,go= /path
fait presque ce que vous voulez: elle définit tous les répertoires sur 700 et tous les fichiers sur 600 ou 700, selon que le bit d'exécution est déjà défini ou non, et je pense que c'est la bonne chose à faire .find
commande que vous avez écrite a donc été très utile en tant que modèle. :)L'utilisation de find est la «bonne» manière, et la seule manière programmatique, bien qu'il existe des variantes:
ou
ou le plus lent:
Chacun d'eux sélectionne un fichier (pas de répertoire, pas de lien symbolique) et lui applique la
chmod
commande. Les deux premiers réduisent le nombre d'appels àchmod
en ajoutant le fichier à la fin d'une ligne de commande interne à chaque fois jusqu'à ce qu'un maximum soit atteint (souvent 10), puis appelle la commande et commence à reconstruire une nouvelle commande. La dernière instruction génère un nouveau processus pour chaque fichier, il est donc moins efficace.la source