Como obter um UUID do sistema de arquivos com um caminho?

9

Recebi um caminho de um diretório ou arquivo.

Qual script de utilitário / shell fornecerá de forma confiável o UUID do sistema de arquivos no qual esse diretório / arquivo está localizado?

Por UUID do sistema de arquivos, quero dizer a UUID=...entrada, como mostrado porblkid

Estou usando o Redhat Linux.

(alguém sugeriu que eu deveria perguntar isso aqui em unix.stackexchange.com, então mudei do original stackexchange.com)

linfan
fonte
3
Veja unix.stackexchange.com/questions/11311/… sobre como obter o sistema de arquivos, após o qual você pode executar blkid.
muru
Observe que nem todos os sistemas de arquivos terão um UUID; O blkid não fornecerá um UUID, por exemplo. para montagens NFS.
Oliver

Respostas:

8

Uma opção é stat+ findmntcombo:

findmnt -n -o UUID $(stat -c '%m' "$path")

Aqui -ndesativa o cabeçalho e -o UUIDimprime apenas o valor UUID. A opção -c '%m'of statestá presente para gerar apenas o ponto de montagem do caminho especificado.

jimmij
fonte
2
Não é necessário stat:findmnt -no uuid -T "$path"
don_crissti
3

Você pode usar o df para localizar o ponto de montagem do arquivo e aplicar o resultado ao blkid no UUID. Você precisa executar (pelo menos) blkid como root para que isso funcione:

FILE_OR_DIR="$PWD"
blkid -s UUID -o value $( df "$FILE_OR_DIR" )
roaima
fonte
Melhor seria -o export, uma vez que imprime a saída do formulário UUID=....
muru
@ muru não estava claro para mim se apenas o UUID era necessário ( -o value) ou uma UUID="value"expressão de tipo ( -o export). Eu escolhi valor.
roaima