¿Cómo obtener el UUID del sistema de archivos dada una ruta?

9

Me entregan una ruta de un directorio o un archivo.

¿Qué utilidad / script de shell me dará de manera confiable el UUID del sistema de archivos en el que se encuentra este directorio / archivo?

Por UUID del sistema de archivos me refiero a la UUID=...entrada como se muestra por ej.blkid

Estoy usando Redhat Linux.

(alguien sugirió que debería preguntar esto aquí en unix.stackexchange.com, así que lo moví del stackexchange.com original)

linfan
fuente
3
Consulte unix.stackexchange.com/questions/11311/… sobre cómo obtener el sistema de archivos, después del cual puede ejecutar blkid.
muru
Tenga en cuenta que no todos los sistemas de archivos tendrán un UUID; blkid no le dará un UUID, por ejemplo. para montajes NFS.
oliver

Respuestas:

8

Una opción es stat+ findmntcombo:

findmnt -n -o UUID $(stat -c '%m' "$path")

Aquí -ndeshabilita el encabezado e -o UUIDimprime solo el valor UUID. La opción -c '%m'de statestá presente para generar solo el punto de montaje de la ruta dada.

jimmij
fuente
2
No hay necesidad de stat:findmnt -no uuid -T "$path"
don_crissti
3

Puede usar df para encontrar el punto de montaje del archivo y luego aplicar el resultado a blkid al UUID. Debe ejecutar (al menos) blkid como raíz para que esto funcione:

FILE_OR_DIR="$PWD"
blkid -s UUID -o value $( df "$FILE_OR_DIR" )
roaima
fuente
Mejor sería -o export, ya que imprime la salida del formulario UUID=....
muru
@muru no tenía claro si solo se requería el UUID ( -o value) o una UUID="value"expresión de tipo ( -o export). Elegí el valor.
roaima