Estoy buscando un comando que devolverá al propietario de un directorio y solo eso, como una expresión regular que analiza el ls -latcomando 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/bino en algún lugar de la casa del usuario), y rara vez está disponible en otras unidades.stat -c %Utiene la ventaja de trabajar también con BusyBox , si elstatcomando está compilado.stat -c '%U' DIRimprimiráUNKNOWN, lo que es menos útil o más apropiado, dependiendo de cómo lo mire.Analizar la salida de
lsrara 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
statcomando, pero el problema constatel shell es que hay varios comandos con una sintaxis diferente, por lo questaten 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 | awkenfoque 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 -pruneque pudieras simplemente hacerfind . -maxdepth 0 -user "$username"awk 'NR==1 {print $3}'lugar de soloawk '{print $3}'? No estoy seguro de por quéNR==1es necesario aquí.lsdó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), BusyBoxlsy FreeBSDlsse 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
findque no tiene-printf.-printf:-(.En pure bash puedes convertir la salida de
lsa una matriz e indexarla.No es tan elegante como el uso
stat,findoawk, pero podría trabajar en un apuro.fuente