Encuentra el propietario de un directory o file, pero solo devuelve eso y nada más

Estoy buscando un command que devuelva el propietario de un directory y solo eso, como un regex que analiza el ls -lat o algo similar. Quiero usar el resultado en otro script.

stat de GNU coreutils puede hacer esto:

 stat -c '%U' /path/of/file/or/directory 

Desafortunadamente, hay varias versiones de stat , y no hay mucha consistencia en su syntax. Por ejemplo, en FreeBSD, sería

 stat -f '%Su' /path/of/file/or/directory 

Si la portabilidad es una preocupación, probablemente sea mejor que utilices la sugerencia de Gilles de combinar ls y awk . Tiene que iniciar dos processs en lugar de uno, pero tiene la ventaja de utilizar solo la funcionalidad estándar POSIX:

 ls -ld /path/of/file/or/directory | awk '{print $3}' 

Analizar el resultado de ls rara vez es una buena idea , pero get los primeros campos es una exception, en realidad funciona en todos los equipos "tradicionales" (no funciona en plataforms tales como algunas implementaciones de Windows que permiten espacios en nombres de usuario) .

 ls -ld /path/to/directory | awk 'NR==1 {print $3}' 

Otra opción es usar un command stat , pero el problema con la stat del shell es que hay varios commands con una syntax diferente, por lo que stat en un script de shell no es portátil (incluso en instalaciones Linux).

Tenga en count que probar si un usuario determinado es el propietario es una propuesta diferente.

 if [ -n "$(find . -user "$username" -print -prune -o -prune)" ]; then echo "The current directory is owned by $username." fi if [ -n "$(find . -user "$(id -u)" -print -prune -o -prune)" ]; then echo "The current directory is owned by the current user." fi 

También se puede hacer esto con GNU find:

 find $directoryname -maxdepth 0 -printf '%u\n' 

Esto no es portátil fuera del sistema GNU, pero me sorprendería encontrar una distribución de Linux donde no funcione.