Utilisez chown
l'option récursive :
chown -R owner:group * .[^.]*
Spécifier à la fois *
et .[^.]*
correspondra à tous les fichiers et répertoires qui find
aurait. Le séparateur recommandé de nos jours est :
au lieu de .
. (Comme l'a souligné Justins, en utilisant .*
n'est pas sûr car il peut être étendu pour inclure .
et ..
, résultant en chown
changer 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 .
Pour les commandes comme chown
qui ont leur propre récursivité, il est plus rapide d'utiliser cette option :
chown -R owner:group * .[^.]*
Avertissement! Dans certains shells, la forme chown -R owner:group * .*
remplace le propriétaire dans le répertoire racine / . Parce que .*
signifie ../../../../root, ../bin ... etc
. Tous les chemins. Cependant, le shell le plus utilisé, bash , ne s'applique pas .
et ..
, expansion des motifs.
Cependant il est utile de savoir que le principal problème qui ralentit votre utilisation de find
est que vous invoquez chmown
sur chaque répertoire et fichier trouvé. C'est beaucoup plus rapide à utiliser :
find . -type f -exec chown <owner>:<group> {} +
find . -type d -exec chown <owner>:<group> {} +
comme à chaque fois chown
est appelée avec autant de paramètres que nécessaire sur la ligne de commande.
Ce changement fonctionne pour d'autres commandes, qui n'ont pas d'option de récursivité intégrée comme chown
, aussi bien. 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 lors de l'utilisation de chmod
, et vous voulez seulement changer de répertoire).