Manera eficiente de obtener un punto de montaje de dispositivo a partir de su UUID

Manera eficiente de obtener un punto de montaje de dispositivo a partir de su UUID

En un script en el que estoy trabajando, se debe usar una variable UUID para obtener el punto de montaje actual al que está conectado un dispositivo. La solución que se me ocurrió es esta:

UUID='fc70ae3d-65e7-4437-a371-b237c8ca3f56h'
MNTPNT=$(lsblk -o +UUID | grep ${UUID} | tr -s ' ' | cut -d ' ' -f 7)

Al ejecutar el comando, la variable MNTPNT almacena el punto de montaje actual como se esperaba. Sin embargo, es un comando bastante extenso y no puedo evitar pensar que debe haber una manera más eficiente de lograr el mismo objetivo.

¿Es posible encontrar una solución mejor? Sería una cuestión de optimización, más que nada. Gracias de antemano por cualquier información.

Respuesta1

findmnt -noTARGET "/dev/disk/by-uuid/$UUID"

grep "$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" /proc/self/mountinfo

awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev{print$5}' /proc/self/mountinfo

Para recortar montajes enlazados:

awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev&&$4=="/"{print$5}' /proc/self/mountinfo

Tenga en cuenta que los dispositivos se pueden montar en varios lugares.

La $(stat ... | xargs printf)monstruosidad se debe sólo a que stat(1)no es capaz de imprimir los números mayores y menores endecimal. ls -HlProbablemente sería mejor simplemente analizar el resultado (y mucho más portátil).

Respuesta2

df | grep "^$(readlink -f /dev/disk/by-uuid/$UUID) " |sed 's/^[^%]*% \+//'

Esto también funciona cuando hay montajes vinculados en subdirectorios del montaje, lo que podría confundir otras posibles soluciones.

(Editar:)
Permitir espacios en el punto de montaje.

(Edición2:)
Mountpoint también puede contener "%".

información relacionada