web-dev-qa-db-fra.com

Un moyen plus rapide de changer de propriétaire / groupe de manière récursive?

Actuellement, quand je veux changer de propriétaire/groupe récursivement, je fais ceci:

find . -type f -exec chown <owner>.<group> {} \;
find . -type d -exec chown <owner>.<group> {} \;

Mais cela peut prendre plusieurs minutes pour chaque commande. J'ai entendu dire qu'il y avait un moyen de le faire pour qu'il change tous les fichiers à la fois (beaucoup plus rapidement), au lieu d'un à la fois, mais je n'arrive pas à trouver les informations. Cela peut-il être fait?

23
danzo

Utilisez l'option récursive de chown:

chown -R owner:group * .[^.]*

Spécification des deux * et .[^.]* correspondra à tous les fichiers et répertoires que find ferait. Le séparateur recommandé de nos jours est : au lieu de .. (Comme indiqué par justins , en utilisant .* n'est pas sûr car il peut être étendu pour inclure . et .., ce qui entraîne chown la modification de la propriété du répertoire parent et de tous ses sous-répertoires.)

Si vous souhaitez également modifier la propriété du répertoire actuel, cela peut être simplifié en

chown -R owner:group .
37
Stephen Kitt

Pour les commandes comme chown qui ont leur propre récursivité, il est plus rapide d'utiliser cette option:

 chown -R owner:group * .[^.]*

Attention! Dans certains obus, la forme chown -R owner:group * .* remplace le propriétaire dans le répertoire racine /. Parce que .* veux dire ../../../../root, ../bin ... etc. Tous les chemins. Cependant, le shell le plus utilisé, bash, ne s'applique pas . et .., étendre les modèles.

Cependant, il est utile de savoir que le principal problème qui ralentit votre utilisation de find est que vous appelez chmown sur chaque répertoire et fichier trouvé. Il est beaucoup plus rapide à utiliser:

find . -type f -exec chown <owner>:<group> {} +
find . -type d -exec chown <owner>:<group> {} +

comme à chaque fois que chown est appelé avec autant de paramètres que possible sur la ligne de commande.

Cette modification fonctionne pour d'autres commandes, qui n'ont pas non plus d'option de récursivité intégrée comme chown. Et cela fonctionne (et améliore la vitesse) dans les situations où il existe une telle option de récursivité mais que vous ne pouvez pas l'utiliser (par exemple lorsque vous utilisez chmod, et que vous souhaitez uniquement modifier les répertoires).

5
Anthon