2010-10-07 10 views
10

Tengo una carpeta con muchos archivos. Los archivos han sido creados por muchos usuarios diferentes. No sé sobre scripts de shell.lista de propietarios de archivos en la carpeta en linux

Necesito obtener la lista del nombre de usuario (solamente) de los propietarios de los archivos.

puedo guardar la salida de ls -l y luego analizarlo usando Perl Python, etc ...

Pero, ¿cómo puedo hacer esto mediante secuencias de comandos shell?

Respuesta

10

Un sencillo es

ls -l /some/dir/some/where | awk '{print $3}' | sort | uniq 

que se consigue un único y lista de propietarios de ordenadas.

+2

El análisis 'ls' no se debe hacer. http://mywiki.wooledge.org/ParsingLs –

+0

@DanielKamilKozar Esa fue una buena lectura, pero solo vale la pena preocuparse por si tiene archivos con nombres extraños. – gmeben

+1

@gmeben: ¿desde cuándo los espacios se consideran impares? –

2

Las dos soluciones hasta ahora son buenas, pero tienen sus limitaciones.

Esto debería garantizar una búsqueda adecuada y recursiva de cada archivo en un árbol de directorios.

sudo find /some/dir/ -exec stat -c "%U" {} + | sort | uniq 

En otras palabras, de forma recursiva buscar archivos en /some/dir y ejecutar stat -c "%U" (nombre de usuario de impresión) en los archivos, en el menor número de invocaciones de stat como sea posible (sintaxis -exec <cmd> {} +), entonces por supuesto sort la lista de nombres de usuario , por lo que puede, a su vez, eliminarlos solo en el uniq ue conjunto de nombres de usuario.

+0

En Freebsd: 'find/some/dir/-type f -exec stat -f"% Su "{} + | ordenar | uniq'. OP está buscando * archivos * solamente, por lo tanto agregué '-type f'. – simlev

Cuestiones relacionadas