Buscando archivos que NO son propiedad de alguien

182

Estoy buscando mirar recursivamente los directorios para encontrar archivos que NO sean propiedad de un usuario en particular y no estoy seguro de cómo escribir esto.

mike628
fuente

Respuestas:

274

La utilidad find (1) tiene primarios que se pueden negar ("revertir") usando el "!" operador. Sin embargo, en la solicitud, uno debe escapar de la negación con una barra invertida, ya que es un metacarácter de shell. Resultado:

find . \! -user foo -print
Mel
fuente
66
escapar de la !parece ser opcional
duda1ejack
1
canalizando la salida xargs -I{} -P3 -- ${cmdhere} {}puede hacer que $ {cmdhere} opere en cada archivo en paralelo. cmdhere :: = utilidades estándar de Unix; utilidades estándar de Unix :: = chmod, chown, stat, ls, ...
Dwight Spencer
1
@sorin, ¿te refieres a la find . ...tubería a xargsla primera o segunda forma?
Kev
3
find tiene el indicador -exec -> find . ! -user foo -exec chown <owner>:<group> {} \;
pastephens
1
¿Cómo agregar información del propietario como salida?
Duc Tran el
38

Buscando archivos que NO son propiedad de alguien

Otros han respondido la pregunta "NO es propiedad de un usuario en particular" en el cuerpo. Aquí hay una que responde a la pregunta titular pero no se ha proporcionado:

$ find / -nouser

Puedes usarlo así:

$ sudo find /var/www -nouser -exec chown root:apache {} \;

Y uno relacionado:

$ find / -nogroup
jww
fuente
3
Le daré un voto por el tecnicismo, pero la gente generalmente diría "no es propiedad de nadie" si quisieran decir lo que usted interpretaba.
Shibumi
2
@Shibumi - Sí, suena bien para esos pelos partidos. El problema que enfrenté fue que necesitaba encontrar archivos que literalmente no pertenecían a ningún usuario. Surgió después de una actualización y migración del servidor web. Algunos identificadores de usuario / grupo cambiaron, así que necesitaba escribir un script para un chown.
jww
12

-userbusca por usuario o ID de usuario e !invierte el predicado. Por lo tanto, ! -user ....

Ignacio Vazquez-Abrams
fuente
2
Voto negativo porque no agrega nada a la respuesta aceptada, y enmascara otras respuestas posibles (como el patrón de zsh glob a continuación).
Ulysse BN
9

Puedes usar esto:

find <dir> ! -user <username> 
Lápiz Violento
fuente
2
Voto negativo porque no agrega nada a la respuesta aceptada, y enmascara otras respuestas posibles (como el patrón de zsh glob a continuación).
Ulysse BN
5

Usando z-shell (zsh) puedes usar

ls -laR *(^U)

o

ls -la **/*(^U)

para buscar todos los archivos de forma recursiva que no sean de su propiedad.

AB
fuente
Es cierto que el comando anterior no enumerará los archivos de puntos, incluso con la -abandera debido a la expansión de comodines. Para la captura de puntos archivos utilizan el zsh dotglobopción: setopt dotglob. En una línea: (setopt dotglob; ls **/*(^U) ). Los paréntesis deben ejecutarse en una subshell para que no tenga que ejecutarse una setopt nodotglobvez que haya terminado.
Zorawar