Como capturar a porcentagem de uso de disco de uma partição como um inteiro?

13

Eu gostaria de um método para capturar o uso do disco de uma partição específica, usando o diretório onde a partição está montada. A saída deve ser apenas um inteiro sem preenchimento ou símbolos a seguir, como eu gostaria de salvá-lo em uma variável.

Eu usei df --output=pcent /mount/point , mas preciso cortar a saída, pois ela tem um cabeçalho desnecessário, preenchimento de espaço único antes do valor e um símbolo% após o valor assim:

Use%
 83%

Neste caso, a saída que gostaria seria simplesmente 83 . Não tenho conhecimento de nenhuma desvantagem de usar a saída de df , mas estou feliz em aceitar outros métodos que não dependem dela.

    
por Arronical 10.11.2016 / 12:02

5 respostas

18

Eu usaria ...

df --output=pcent /mount/point | tr -dc '0-9'

Não tenho certeza se sed é mais rápido, mas não consigo me lembrar dos valores sed.

    
por bc2946088 10.11.2016 / 12:47
8

Aqui está a solução do awk:

$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print }'   
 37

Basicamente, o que acontece aqui é que tratamos o caractere '%' como separador de campo (coluna delimitadora), e imprimimos a primeira coluna $ 1 somente quando o número de registros for igual a dois ( NR==2 parte)

Se quiséssemos usar as ferramentas bash -only, poderíamos fazer algo assim:

bash-4.3$ df --output=pcent / | while IFS= read -r line; do ((c++)); [ $c -eq 2 ] && echo "${line%\%*}"  ;done
 74
    
por Sergiy Kolodyazhnyy 10.11.2016 / 12:57
7

sed solution

df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
  • 1d elimina a primeira linha
  • ; para separar comandos
  • s/^ // remove um espaço do início das linhas
  • s/%// remove % sign
por Zanna 10.11.2016 / 12:33
6

Você pode canalizar para um grep que apenas extrai dígitos:

df --output=pcent /mount/point | grep -o '[0-9]*'

Veja ao vivo:

$ echo "Use%
> 83%" | grep -o '[0-9]*'
83
    
por fedorqui 11.11.2016 / 10:28
0

Eu deparei com um servidor onde --output = pcent ainda não estava implementado, então usei a saída normal, filtrada por coluna, seguida da regex: df /mount/point | awk '{print }' | tr -dc '0-9'

    
por Ramon Fincken 03.01.2018 / 19:55