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.

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

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

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 ....


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> 

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.