Antes de tudo, vamos esclarecer algumas coisas. Quando você executa df -h --total
, há algumas coisas que mostram sistemas de arquivos virtuais, como tmpfs
e udev
. Nós não queremos exatamente isso, mas queremos conhecer todos os sistemas de arquivos físicos . Assim, queremos filtrar apenas /dev
itens:
$ df -h | grep '^/dev/'
/dev/sda1 110G 77G 29G 74% /
/dev/sdb6 399G 223G 157G 59% /mnt/HDD
Mas também há um problema: -h
nos dá total no formato legível por humanos. Nós não podemos realmente adicionar itens com letras neles. grep
também não pode executar cálculos. Assim, em vez disso, vamos usar awk
, somando a terceira coluna:
$ df --block-size=1 | awk '/^\/dev/{total+=$3}END{print total}'
320762605568
Ótimo! agora só precisamos encontrar a versão humana legível desse número. Podemos sempre escrever código no awk para fazer isso, mas já existe o numfmt
utility. Então podemos fazer isso:
$ df --block-size=1 | awk '/^\/dev/{total+=$3}END{print total}' | numfmt --to=iec-i --suffix=B --padding=7
299GiB
E é assim que você tem o total de todos os dispositivos físicos que são montados (que é o que o df
exibe por padrão).