Maneira eficiente de obter um ponto de montagem de dispositivo a partir de seu UUID

Maneira eficiente de obter um ponto de montagem de dispositivo a partir de seu UUID

Em um script no qual estou trabalhando, uma variável UUID deve ser usada para obter o ponto de montagem atual ao qual um dispositivo está conectado. A solução que encontrei é esta:

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

Ao executar o comando, a variável MNTPNT armazena o ponto de montagem atual conforme esperado. No entanto, é um comando bastante extenso e não posso deixar de pensar que deve haver uma forma mais eficiente de atingir o mesmo objectivo.

É possível encontrar uma solução melhor? Seria uma questão de otimização, principalmente. Agradecemos antecipadamente por qualquer insight.

Responder1

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 aparar montagens de ligação:

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

Lembre-se de que os dispositivos podem ser montados em vários locais.

A $(stat ... | xargs printf)monstruosidade ocorre apenas porque stat(1)não é capaz de imprimir os números maiores e menores emdecimal. Apenas analisar a saída ls -Hlprovavelmente seria melhor (e muito mais portátil).

Responder2

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

Isso funciona também quando montagens de ligação estão presentes em subdiretórios da montagem, o que pode confundir algumas outras soluções potenciais.

(Editar:)
Permita espaços no ponto de montagem.

(Edit2:)
O ponto de montagem também pode conter "%".

informação relacionada