Um esboço rápido de uma impressora de uso de disco awk
(nb: tentei apenas no Linux):
#!/bin/sh
while ! [ $# -eq 0 ]; do
df --block-size=1G | awk '$1 ~ /\/dev\/'"${1}"'/ {free+=$4; total+=$2} END {printf "%4s: %4sG / %4sG\n", "'"${1}"'", free, total}'
shift
done
Salve o script acima como, por exemplo, dfsum
e executá-lo como, por exemplo:
$ dfsum sda sdb
sda: 19G / 916G
sdb: 59G / 1834G
EDIT: Uma versão atualizada com cabeçalho e detecção automática de discos:
#!/bin/sh
df --block-size=1G | awk '
BEGIN {printf "%-5s%5s %5s\n", "disk", "free", "total"}
!match($1, "^/dev/([[:alpha:]]+)", disk) {next} \
{free[disk[1]]+=$4; total[disk[1]]+=$2} \
END {for (var in free) printf "%3s: %4sG / %4sG\n", var, free[var], total[var]}'
Observação: isso requer gawk
.
EDITAR novamente:
#!/bin/sh
df --block-size=1G |\
awk '
BEGIN {
printf "%-5s%5s %5s\n", "disk", "free", "total"
}
!match($1, "^/dev/([[:alpha:]]+)[[:digit:]]", disk) {next}
{
free[disk[1]]+=$4
total[disk[1]]+=$2
}
END {
for (var in free) {
printf "%3s: %4sG / %4sG\n", var, free[var], total[var]
totalfree+=free[var]
totalsize+=total[var]
}
printf " -------------\n %4sG / %4sG\n", totalfree, totalsize
}
'
Isso também dá uma soma total e corrige uma mudança no meu sistema que ocorreu após uma reinicialização, em que uma coluna com /dev/disk/by-uuid/
... é mostrada para o sistema de arquivos raiz na saída df
, mas também como uma partição separada. entrada como /dev/sda1
. Estou interessado apenas no último.