Cambiar propietario para todos los archivos que son propiedad de x

4

Copié archivos de mi MacBook, principalmente archivos de / usr. El único usuario en mi computadora se llama 'Julian' (como en mi MacBook). Muchos de los archivos copiados ahora son propiedad de '501' (id de "Julian" de MB).

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

¿Hay alguna forma de cambiar el propietario de todos los archivos propiedad de '501' a 'Julian'?

    
pregunta Julian 10.07.2012 - 01:39

3 respuestas

7

Claro, con el comando de búsqueda casi mágico. La forma más sencilla es así:

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

El comando "buscar" se explica en la página del manual, y en una serie de tutoriales y procedimientos como este , en pocas palabras, la idea corta es "encontrar todo lo que coincida con estos criterios y hacer este comando con cada uno".

  • . significa buscar (y debajo) el directorio de trabajo actual.
  • -user 501 significa que solo se encuentran los archivos propiedad del usuario 501.
    • Tenga en cuenta que esto es específico de BSD; en algunos otros sistemas POSIX, el usuario toma un nombre de usuario y un indicador uid separado toma las ID de usuario numéricas.
  • -exec … {} + significa ejecutar lo que esté en el "..." (en este caso, "chown Julian") repetidamente, pasándole tantos archivos como sea posible.
    • Entonces, si hay 5000 archivos, puede terminar llamando a Chown 4 veces (en el primer 1203, luego en el siguiente 1888, y así sucesivamente).
    • Tenga en cuenta que esta es una extensión BSD (aunque GNU tiene una extensión similar); hay un equivalente portátil con ; en lugar de + , pero esto llamará a chown una vez para cada archivo, lo que generalmente tomará mucho más tiempo. (La solución estándar es usar -print0 y canalizar el resultado a xargs -0. Pero, dado que estás haciendo esto en un sistema BSD, no tienes que hacerlo).
    • Tenga en cuenta que si está escribiendo esto en el shell, algunos shells requerirán que escape de las llaves, pero bash (el shell predeterminado en las Mac modernas) no.
respondido por el abarnert 10.07.2012 - 02:21
2

Esto hará lo que quieras:

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

Explicación:

  • El . inicia la búsqueda desde el directorio actual.
  • El -type f requiere solo archivos para coincidir, no directorios. (Omita esto si también desea cambiar directorios).
  • El -uid 501 requiere que todas las coincidencias sean propiedad de este usuario.
  • El -print0 separa las coincidencias por nulos en lugar de espacios para que no se malinterprete ninguna ruta que contenga espacios.
  • El xargs -0 garantiza que la entrada xargs busca delimitadores nulos en lugar de espacios. Dado que chown puede aceptar múltiples archivos, xargs se usa para garantizar que sudo chown se ejecute solo con la frecuencia necesaria para afectar a todos los archivos listados. (En este sentido, es mucho más rápido que un find ... -exec equivalente).
respondido por el Kevin Grant 10.07.2012 - 02:25
0

No estoy seguro de si esto romperá las cosas en OS X si los archivos están relacionados con el sistema. Pero para cambiar el propietario de los archivos haga un

sudo chown -R Julian <directory>

-R significa que el propietario se cambia para todos los archivos de forma recusiva en el directorio actual. Así que ten cuidado.

man chown debería darle algunos detalles adicionales.

    
respondido por el emteh 10.07.2012 - 01:43

Lea otras preguntas en las etiquetas