Estoy buscando un comando que devolverá al propietario de un directorio y solo eso, como una expresión regular que analiza el ls -lat
comando o algo similar. Quiero usar el resultado en otro script.
shell-script
ls
Jason
fuente
fuente
stat
(un estándar de todo el sitio) en/usr/local/bin
o en algún lugar de la casa del usuario), y rara vez está disponible en otras unidades.stat -c %U
tiene la ventaja de trabajar también con BusyBox , si elstat
comando está compilado.stat -c '%U' DIR
imprimiráUNKNOWN
, lo que es menos útil o más apropiado, dependiendo de cómo lo mire.Analizar la salida de
ls
rara vez es una buena idea , pero obtener los primeros campos es una excepción, en realidad funciona en todos los dispositivos "tradicionales" (no funciona en plataformas como algunas implementaciones de Windows que permiten espacios en los nombres de usuario).Otra opción es usar un
stat
comando, pero el problema constat
el shell es que hay varios comandos con una sintaxis diferente, por lo questat
en un script de shell no es portátil (incluso en instalaciones de Linux).Tenga en cuenta que probar si un usuario determinado es el propietario es una propuesta diferente.
fuente
ls | awk
enfoque también, lamentablemente, como he señalado aquí . Todavía no he encontrado una solución para el problema "el archivo / directorio de destino es un enlace simbólico con un nombre diferente" que mencioné en mi comentario reciente.find . -user "$username" -print -prune -o -prune
que pudieras simplemente hacerfind . -maxdepth 0 -user "$username"
awk 'NR==1 {print $3}'
lugar de soloawk '{print $3}'
? No estoy seguro de por quéNR==1
es necesario aquí.ls
dónde una nueva línea en una ruta hace que la línea se divida en dos (que creo que es el caso límite que está tratando de cubrir)? En GNUls
(versión nueva), BusyBoxls
y FreeBSDls
se devuelve una nueva línea como$'\n'
,?
y?
, respectivamente.También se puede hacer esto con GNU find:
Esto no es portátil fuera del sistema GNU, pero me sorprendería encontrar una distribución de Linux donde no funcione.
fuente
find
que no tiene-printf
.-printf
:-(.En pure bash puedes convertir la salida de
ls
a una matriz e indexarla.No es tan elegante como el uso
stat
,find
oawk
, pero podría trabajar en un apuro.fuente