Эффективный способ получения точки монтирования устройства по его UUID

Эффективный способ получения точки монтирования устройства по его UUID

В скрипте, над которым я работаю, переменная UUID должна использоваться для получения текущей точки монтирования, к которой подключено устройство. Решение, которое я придумал, следующее:

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

После выполнения команды переменная MNTPNT сохраняет текущую точку монтирования, как и ожидалось.. Однако это довольно обширная команда, и я не могу не думать о том, что должен быть более эффективный способ достижения той же цели.

Можно ли придумать лучшее решение? Это будет в основном вопрос оптимизации. Заранее спасибо за любые идеи.

решение1

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

Для обрезки креплений:

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

Имейте в виду, что устройства можно устанавливать в нескольких местах.

Чудовищность $(stat ... | xargs printf)только в том, что stat(1)не может напечатать главные и второстепенные числадесятичная дробь. Простой анализ вывода, ls -Hlвероятно, был бы лучше (и гораздо более переносимым).

решение2

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

Это работает также при наличии bind-mounts подкаталогов монтирования, что может запутать некоторые другие потенциальные решения.

(Изменить:)
Разрешить пробелы в точке монтирования.

(Ред.2:)
Точка монтирования также может содержать «%».

Связанный контент