從 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:)
掛載點也可能包含「%」。

相關內容