J'ai changé le nom court de mon compte utilisateur, mais cela semble avoir causé un problème avec certains fichiers (surtout des trucs personnalisés), qui sont toujours possédés par l'ancien nom d'utilisateur. Mon ancien nom court était cannyboy, et le nouveau est cannyman. Comment puis-je parcourir tout le disque dur et changer la propriété de tous les cannyboy
en cannyman
, sans modifier les autres attributs des fichiers?
Réponses
Trop de publicités?En tant que débutant, je vous suggérerais d'exécuter la fonction "réparer les autorisations" dans l'utilitaire de disque.
Si le problème persiste, vous pourriez exécuter une commande comme :
find . -user old_user | while read file; do echo chown new_user $file; done
note : cela ne fait rien tel quel actuellement - vous devrez l'ajuster à vos besoins - et assurez-vous que cela ne fasse rien de mal.
mise à jour j'ai appris un peu plus et maintenant j'exécuterais une commande comme celle-ci :
find . -user old_user -print0 | xargs -0 sudo echo chown new_user
encore une fois, ajustez la commande avant de l'exécuter !
Pour ce que ça vaut, changer le nom court est considéré comme "mauvais". Devinez maintenant pourquoi.
Cela dit, une façon de gérer cela est d'utiliser "find" pour localiser tous les fichiers appartenant à cannyboy:
find * -user cannyboy
(pour juste homebrew vous pourriez limiter ceci à la hiérarchie des dossiers /usr/local comme):
find -f /usr/local/* -user cannyboy
Ensuite, bouclez à travers les résultats avec:
sudo chown cannyboy cannyman *fichier*
notez que la commande ci-dessus nécessitera sudo et si vous faites une erreur, cela pourrait causer d'autres problèmes.
Pour faire ceci en deux étapes, d'abord:
find -f /usr/local/* -user cannyboy > fichiers.txt
Ensuite, bouclez à travers fichiers.txt en utilisant le script suivant (avec sudo):
#!/bin/bash
while read fichier;
do
chown cannyboy cannyman $fichier
done
L'avantage de ceci est que vous pouvez utiliser un sous-ensemble de votre fichier txt pour tout tester avant de vous engager dans un changement massif.
Si vous êtes courageux, vous pouvez essayer le processus en une seule étape (cela devrait fonctionner, mais ce n'est pas garanti):
#/bin/bash
for resultat in `find -f /usr/local/* -user cannyboy`
do
chown cannyboy cannyman $resultat
done
(au fait, avant Mac OS X 10.8.1, il y avait un vilain bug de find qui omettait certains résultats)