5 votes

Changer le propriétaire de tous les fichiers appartenant à x

J'ai copié des fichiers de mon MacBook, principalement des fichiers de /usr. Le seul et unique utilisateur de mon ordinateur s'appelle 'Julian' (comme sur mon MacBook). Beaucoup de fichiers copiés appartiennent maintenant à '501' (identifiant de 'Julian' sur le MB).

drwxrwxr-x@  28 501     admin   952  8 Jul 23:02 man/

Existe-t-il un moyen de changer le propriétaire de tous les fichiers appartenant à '501' en 'Julian' ?

8voto

Bien sûr, avec la commande quasi magique de recherche. La méthode la plus simple est la suivante :

find . -user 501 -exec chown Julian {} +

La commande "find" est expliquée dans la page de manuel, ainsi que dans un certain nombre de tutoriels et de guides pratiques tels que celui-ci L'idée est de trouver tout ce qui correspond à ces critères et d'exécuter cette commande pour chacun d'entre eux.

  • . signifie qu'il faut chercher dans (et sous) le répertoire de travail actuel.
  • -user 501 signifie trouver uniquement les fichiers appartenant à l'utilisateur 501.
    • Notez que ceci est spécifique à BSD ; dans d'autres systèmes POSIX, user prend un nom d'utilisateur, et un drapeau uid séparé prend les identifiants numériques des utilisateurs.
  • -exec … {} + signifie qu'il faut exécuter ce qui se trouve dans le " " (dans ce cas, "chown Julian") à plusieurs reprises, en lui transmettant le plus grand nombre possible de fichiers trouvés.
    • Ainsi, s'il y a 5000 fichiers, il se peut qu'il appelle chown 4 fois (sur les 1203 premiers, puis sur les 1888 suivants, et ainsi de suite).
    • Notez qu'il s'agit d'une extension BSD (bien que GNU dispose d'une extension similaire) ; il existe un équivalent portable avec ; au lieu de + mais cela appellera chown une fois pour chaque fichier, ce qui prendra généralement beaucoup plus de temps. (La solution standard est d'utiliser -print0 et d'envoyer le résultat à xargs -0, mais comme vous le faites sur un système BSD, vous n'avez pas à le faire).
    • Notez que si vous tapez cela dans le shell, certains shells vous demanderont d'échapper aux accolades, ce qui n'est pas le cas de bash (le shell par défaut sur les Macs modernes).

3voto

Cela fera ce que vous voulez :

find . -type f -uid 501 -print0 | xargs -0 sudo chown Julian

Explication :

  • Les . lance la recherche à partir du répertoire actuel.
  • Les -type f ne requiert que des fichiers, et non des répertoires. (Oubliez ceci si vous souhaitez également modifier les répertoires).
  • Les -uid 501 exige que toutes les correspondances appartiennent à cet utilisateur.
  • Les -print0 sépare les correspondances par des zéros au lieu d'espaces afin que tout chemin contenant des espaces ne soit pas mal interprété.
  • Les xargs -0 garantit que xargs recherche les délimiteurs null au lieu des espaces. Puisque les chown peut accepter plusieurs fichiers, xargs est utilisé pour s'assurer que sudo chown n'est exécuté que le nombre de fois nécessaire pour affecter chaque fichier répertorié. (À cet égard, il est beaucoup plus rapide qu'une commande équivalente de find ... -exec .)

1voto

Je ne suis pas sûr que cela puisse nuire à OS X si les fichiers sont liés au système. Mais pour changer le propriétaire des fichiers, faites un

sudo chown -R Julian <directory>

-R signifie que le propriétaire est changé pour tous les fichiers récusés dans le répertoire courant. Soyez donc prudent.

man chown devrait vous donner quelques détails supplémentaires.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X