Puis-je changer la propriété de tous les fichiers d'un utilisateur spécifique?

9

Existe-t-il un moyen de trouver récursivement tous les fichiers appartenant à un utilisateur et de les changer en un autre utilisateur / groupe dans Gnu / Linux?

Je suppose qu'il doit y avoir de la magie, mais mes compétences en magie de ligne de commande ne sont pas à la hauteur :)

Merci!

John
la source

Réponses:

14

Utilisez la findcommande avec l' -useroption. Quelque chose comme:

find / -user john

affichera éventuellement tous les fichiers appartenant à l'utilisateur "john".

Si vous voulez changer leur propriétaire (je lancerais le findsans exécution pour vous assurer que vous avez la liste que vous voulez), alors quelque chose comme:

find / -user john -exec chown harry {} \;

le fera.

cjc
la source
1
J'utilise généralement l'UID et chown harry:harryje l' exécute si je dois m'assurer que l'appartenance au groupe est également correcte. Mais cela dépend fortement de l'application ici.
ewwhite
Cela ne fonctionnerait en fait pour moi que si j'utilisais l'UID. L'UID se trouve dans / etc / passwd
user222054
7

C'est tard, mais aujourd'hui je suis tombé sur cette question parce que mon rsyncn'a pas la --usermappossibilité.

My chown(v. Chown (GNU coreutils) 8.13) propose une recurse ( -R) intégrée et une --fromoption pour que votre (et mon) problème puisse également être résolu en utilisant

chown -R --from=john harry /


Plus précisément, je migre un serveur d'OpenSuse vers Debian, et l'utilisateur et le groupe d'apache2 diffèrent entre les distributions. Dans OpenSuse, son utilisateur wwwrun (id:30)et son groupe www (id:8), dans debian www-data (id: 33)pour les deux. Après avoir copié les fichiers en utilisant

rsync -az /path/to/files me@debian:/path/to/

j'ai utilisé

chown -R --from=30 33 /path/to/files/
chown -R --from=:8 :33 /path/to/files/

sur la machine cible (debian).


Remarque: rsync version 3.1.0 protocol version 31a ce qui précède, --usermapdonc si j'avais eu, j'aurais pu faire les trois étapes avec une seule commande sur la machine source:

rsync -az --usermap=30:33 --groupmap=8:33 /path/to/files root@debian:/path/to/
Aet3miirah
la source
Je préfère celui-ci, surtout pour l'option de changer de groupe également. Un find -execliner pour moi est un dernier recours, juste avant de faire les choses manuellement. (Aussi, je déteste écrire {} \;, mais c'est personnel)
Tomasz Gandor