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.