Fichiers Chmod pour donner récursivement au groupe les mêmes autorisations que l'utilisateur

15

Existe-t-il une commande unix pour donner au groupe les mêmes autorisations que l'utilisateur possède actuellement fichier par fichier de manière récursive pour une arborescence de répertoires? Autrement dit, si un fichier est accessible en écriture par l'utilisateur, il devrait devenir accessible en écriture par groupe, sinon il ne devrait pas être accessible en écriture par groupe, etc.


la source

Réponses:

24

Félicitations à jamessan pour nous avoir montré g = u. Sur mon système, cela semble fonctionner:

chmod -R g=u dir
Joey Adams
la source
1
Cela modifie également les autorisations des répertoires. Les fichiers spécifiés pour la question d'origine.
jamessan
@jamessan, quels répertoires sont.
Mike Graham
@Mike, juste parce que * nix vous permet de traiter à peu près tout comme un fichier, ne signifie pas que les répertoires sont en fait des fichiers. Même si l'on devait admettre qu'ils sont identiques, il existe une différence fonctionnelle distincte entre la modification des autorisations de tous les fichiers d'une arborescence de répertoires et la modification des autorisations de tous les fichiers et répertoires d'une arborescence de répertoires.
jamessan
Encore une fois, il existe une solution simple à mon problème. Pourquoi je ne suis pas surpris?
rzetterberg
9
find dir -type f -exec chmod g=u '{}' \+
jamessan
la source
0

Je ne peux pas penser à un moyen facile de le faire avec les commandes existantes. Peut-être qu'un script comme celui-ci aiderait:

#!/bin/bash

DIR="$1"

find "$DIR" -ls | while read a b perm c d e f g h i file; do
   uperm=${perm:1:3}
   uperm=$(echo "$uperm" | tr -d '-')
   chmod g=$uperm "$file"
done

Gardez également à l'esprit que certaines autorisations pour les utilisateurs peuvent ne pas s'appliquer aux groupes, et vice versa.

ℝaphink
la source
0

Je ne sais pas si une telle commande existe mais en utilisant find et en l'invoquant plusieurs fois, vous pouvez réaliser
ce que vous essayez de faire, par exemple

Par exemple:
% find . -type f -perm -u+w -and ! -perm -g+w -exec chmod g+w {} \;

La commande ci-dessus parcourt le répertoire en cours ".", Recherche tous les fichiers qui ont une autorisation d' écriture pour
l'utilisateur mais aucune autorisation d' écriture pour le groupe et y modifie l'autorisation pour être accessible en écriture au groupe.

De même, vous utilisez la variante ci-dessus pour modifier les autorisations de fichier pour le mode de lecture et d' exécution pour le groupe.

sateesh
la source