2 votos

Cambiar la propiedad de todos los archivos, de un propietario a otro

He cambiado el nombre corto de mi cuenta de usuario, pero parece que ha causado un problema con algunos archivos (especialmente cosas de homebrew), que todavía son propiedad del antiguo nombre de usuario. Mi antiguo nombre corto era cannyboy, y el nuevo es cannyman. ¿Cómo puedo ir a través de todo el disco duro y cambiar la propiedad de todos los cannyboy a cannyman ¿Sin cambiar ningún otro atributo de los archivos?

3voto

Bratch Puntos 1531

Como inicio te sugiero que ejecutes la función "reparar permiso" en la utilidad de discos.

Si el problema aún persiste puedes ejecutar un comando como

find . -user old_user | while read file; do echo chown new_user  $file; done

nota: esto no hace nada tal y como está ahora - tendrás que ajustarlo a tus necesidades - y asegurarte de que no hace nada malo.

actualización aprendí un poco más y ahora ejecutaría un comando como este:

find . -user old_user -print0 | xargs -0  sudo echo chown new_user

¡vuelva a ajustar el comando antes de ejecutarlo!

0 votos

He intentado ejecutar el comando como find . -user old_user | while read file; do chown new_user \"$file\"; done pero no funciona con archivos con espacios. ¿como logramos este comando con archivos con espacios?

1 votos

He añadido la línea como lo haría hoy en día - que funciona incluso con espacios y caracteres raros.

3voto

sdmeyers Puntos 1356

FWIW cambiar el nombre corto se considera "malo". Supongo que ahora puedes ver por qué.

Dicho esto, una forma de solucionar esto es utilizar "find" para localizar todos los archivos propiedad de cannyboy:

find * -user cannyboy

(para solo homebrew podrías limitar esto a la jerarquía de carpetas /usr/local/ como):

find -f /usr/local/* -user cannyboy

A continuación, haga un bucle con los resultados:

sudo chown cannyboy cannyman *file*

Tenga en cuenta que el comando anterior requerirá sudo y si se equivoca podría causar más problemas.

Para hacer esto en un proceso de dos pasos, primero:

find -f /usr/local/* -user cannyboy > files.txt

A continuación, haga un bucle a través de files.txt utilizando el siguiente script (con sudo):

#!/bin/bash

while read file;
do
    chown cannyboy cannyman $file
done

La ventaja de esto es que puedes usar un subconjunto de tu archivo txt para probar todo antes de comprometerte con un cambio masivo.

Si eres valiente, puedes probar el proceso de un solo paso (debería funcionar, pero podría no hacerlo):

#/bin/bash
for result in `find -f /usr/local/* -user cannyboy`
do
    chown cannyboy cannyman $result
done

(Por cierto, antes de Mac OS X 10.8.1 existía un desagradable error de búsqueda que omitía algunos resultados)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X