df -h | awk '$NF == "/" { if($1 ~ /^[0-9]/) print $3; else print $4 }'
ou
df -h | awk '$NF == "/" { if($5 == "/") print $3; else print $4 }'
Estou tentando encontrar espaço em disco disponível por meio do console
Eu encontrei df -h | awk '$NF == "/" { print $4 }' para obter a saída necessária.
[root@tmpe2etstmsdc01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_root-lv_root 542G 22G 492G 5% /
tmpfs 127G 0 127G 0% /dev/shm
Avail
[root@tmpe2etstmsdc01 ~]# df -h | awk '$NF == "/" { print $4 }'
492G
Isso fornece o valor Use% quando Filesystem é longo
[root@ldrnr-tlsmsdc16 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_root-lv_root
16G 16G 0 100% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
Aqui, o comando dá Use% em vez de Avail
[root@ldrnr-tlsmsdc16 ~]# df -h | awk '$NF == "/" { print $4 }'
100%
Como posso obter Avail nesta condição?
Tente:
stat -fc %a /mountpoint
%a é blocos disponíveis para não-superusuário. Use %f para blocos livres totais. Note também que %s é o tamanho do bloco, então se você quiser, digamos, bytes livres totais, você poderia dizer algo como:
stat -fc '%f * %s' /mountpoint | bc
Veja a página man do stat (1) para mais opções . Em geral, stat(1) será mais fácil de trabalhar do que df para saída analisável.
Com o GNU coreutils, você pode usar isto:
df -h --output=avail / | sed '1d'
Para imprimir apenas a linha Avail do sistema de arquivos montado em / . Unfortunatly df não tem opção para desabilitar a linha de cabeçalho, então sed remove a primeira linha.
Você também pode tentar com o awk:
df -h|tail -n +2 | awk '{if ($5 == "/")print $3; }'
OR:
df -h|tail -n +2 | awk '{if ($6 == "/") print $4; }'
Dependendo da saída do seu df
Tags awk