从 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/^[^%]*% \+//'

当挂载子目录中存在绑定挂载时,这也适用,这可能会混淆其他一些潜在的解决方案。

(编辑:)
在安装点中允许空格。

(编辑2:)
挂载点也可能包含“%”。

相关内容