A formatação legível dos números fica no caminho, então você precisa ter saída consistente primeiro. Portavelmente, você pode usar a opção -P
para produzir em blocos de 1024
df -P | awk 'NR>2{sum+=$2}END{print sum}'
Se você usa o GNU df
, pode especificar a opção --blocksize
:
df --block-size=1 | awk 'NR>2{sum+=$2}END{print sum}'
NR>2
portion é para evitar lidar com a linha de cabeçalho Size
. Quanto à formatação de dados de volta para o formato legível, se você estiver no Linux, você pode usar a ferramenta numfmt
, caso contrário - implemente o conversor em awk
. Veja a resposta relacionada .
Observe também que df
produz tamanhos para todos os sistemas de arquivos, incluindo sistemas de arquivos virtuais, como udev
e tmpfs
. Você pode considerar filtrá-los se quiser apenas os discos físicos reais. Então, se considerarmos apenas sistemas de arquivos que possuem um arquivo de dispositivo representado em /dev/
filesystem, você provavelmente poderia usar algo assim:
df -P | awk 'NR>2 && /^\/dev\//{sum+=$2}END{print sum}'
Com o GNU df
, você pode considerar também usar --local
flag para ignorar a remoção de sistemas de arquivos.