¿Puedo cambiar la propiedad de todos los archivos de un usuario específico?

9

¿Hay alguna manera de encontrar de forma recursiva todos los archivos propiedad de un usuario y cambiarlos a otro usuario / grupo en Gnu / Linux?

Supongo que debe haber algo mágico, pero mis habilidades de hechicería de línea de comando no están a la altura :)

¡Gracias!

Juan
fuente

Respuestas:

14

Usa el findcomando con la -useropción. Algo como:

find / -user john

eventualmente aparecerá todos los archivos propiedad del usuario "john".

Si desea cambiar su propiedad (ejecutaría findsin ejecución para asegurarme de que tiene la lista que desea), entonces algo como:

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

lo haré.

cjc
fuente
1
Usualmente uso UID y ejecuto chown harry:harrysi necesito asegurarme de que la membresía del grupo también sea correcta. Pero eso depende en gran medida de la aplicación aquí.
ewwhite
En realidad, no funcionaría para mí a menos que usara el UID. El UID se puede encontrar en / etc / passwd
user222054
7

Esto es tarde, pero hoy me topé con esta pregunta porque mi rsyncno tiene la --usermapopción.

My chown(v. Chown (GNU coreutils) 8.13) ofrece una recurse ( -R) incorporada y una --fromopción para que su problema (y el mío) también se haya resuelto utilizando

chown -R --from=john harry /


Más específicamente, estoy migrando un servidor de OpenSuse a Debian, y el usuario y el grupo de apache2 difieren entre las distribuciones. En OpenSuse su usuario wwwrun (id:30)y grupo www (id:8), en debian www-data (id: 33)para ambos. Después de copiar los archivos usando

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

solía

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

en la máquina de destino (debian).


Nota: rsync version 3.1.0 protocol version 31tiene lo mencionado anteriormente, --usermapasí que si tuviera eso, podría haber hecho los tres pasos con un comando en la máquina de origen:

rsync -az --usermap=30:33 --groupmap=8:33 /path/to/files root@debian:/path/to/
Aet3miirah
fuente
Prefiero este, especialmente para la opción de cambiar de grupo también. Un find -exectrazador de líneas para mí es el último recurso, justo antes de hacer las cosas manualmente. (Además, odio escribir {} \;, pero esto es personal)
Tomasz Gandor