Re: Customized df -h



On Sun, 9 Aug 2009, houghi wrote:-

houghi wrote:
Oh well. Hope you enjoy it.

A sample output

<Snip>

My output from the script was a bit wrong because I have an NFS share
mounted:

davjam@moray:~> df-h
donnas.davjam.org:/videos 466G 193G 273G 42% /mounts/donnas/videos
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 392K 2.0G 1% /dev
/dev/mapper/500GB-500_home 410G 253G 158G 62% /home
/dev/mapper/500GB-tmp 9.7G 151M 9.1G 2% /tmp
/dev/mapper/500GB-usr 20G 4.9G 14G 27% /usr
/dev/mapper/500GB-var_log 1.5G 71M 1.4G 5% /var/log
/dev/sda1 160M 16M 137M 11% /boot
/dev/sda5 20G 1.2G 18G 6% /
/dev/sdb1 233G 134G 100G 58% /mnt
/dev/sdc1 96G 62G 35G 64% /local/photographs
/dev/sdc5 96G 23G 74G 24% /local/DVD_temp
/dev/sdc6 95G 37G 53G 42% /local/music
/dev/sdc7 178G 165G 14G 93% /local/ISOs
/dev/sr0 2.1M 2.1M 0 100% /media/SEAGATE
-------------------------------------------------------------------
All in GB 1157G 677G 472G
All in TB 1.12T .66T .46T 58% @moray x86_64
-------------------------------------------------------------------

So, with a "little" tweaking to sort this out, drop the requirement for
a temporary file, and to make some cosmetic changes to the output, I now
get this:

davjam@moray:~> df-h
Filesystem Size Used Avail Use% Mounted on
donnas.davjam.org:/videos 466G 193G 273G 42% /mounts/donnas/videos
udev 2.0G 392K 2.0G 1% /dev
/dev/mapper/500GB-500_home 410G 253G 158G 62% /home
/dev/mapper/500GB-tmp 9.7G 151M 9.1G 2% /tmp
/dev/mapper/500GB-usr 20G 4.9G 14G 27% /usr
/dev/mapper/500GB-var_log 1.5G 71M 1.4G 5% /var/log
/dev/sda1 160M 16M 137M 11% /boot
/dev/sda5 20G 1.2G 18G 6% /
/dev/sdb1 233G 134G 100G 58% /mnt
/dev/sdc1 96G 62G 35G 64% /local/photographs
/dev/sdc5 96G 23G 74G 24% /local/DVD_temp
/dev/sdc6 95G 37G 53G 42% /local/music
/dev/sdc7 178G 165G 14G 93% /local/ISOs
/dev/sr0 2.1M 2.1M 0 100% /media/SEAGATE
-------------------------------------------------------------------
All in GB 1157G 677G 472G
All in TB 1.12T .66T .46T 58% @moray x86_64
-------------------------------------------------------------------

My tweaked script is now this:

#!/bin/bash

# Personalized `df -h` with totals
LINE="-------------------------------------------------------------------"
TMPF=$(df -hP|grep -v "Mounted on")

function max_columns
{
COLS="0"
local STRING
while [ $# -gt 0 ]
do
STRING=$1
COLS=$(( ${#STRING}>${COLS} ? ${#STRING} : ${COLS} ))
shift
done
}

max_columns ${TMPF}

printf "%-${COLS}s\t%8s%8s%8s%8s %-s\n" "Filesystem" "Size" "Used" "Avail" "Use%" "Mounted on"

# cat $TMPF
# Uncomment previous and comment the next two
# if df -h is not shown correctly

function do_columns
{
local DEVICE
local SIZE
local USED
local AVAIL
local PERC
local WHERE

while [ "$#" -gt 0 ]
do
DEVICE=$1 ; shift
SIZE=$1 ; shift
USED=$1 ; shift
AVAIL=$1 ; shift
PERC=$1 ; shift
WHERE=$1 ; shift
printf "%-${COLS}s\t%8s%8s%8s%8s %-s\n" "${DEVICE}" "${SIZE}" "${USED}" "${AVAIL}" "${PERC}" "${WHERE}"
done
}

do_columns $(echo "${TMPF}" | egrep -v '^/|@' |sort)
do_columns $(echo "${TMPF}" | egrep '^/|@' |sort)
# The showing of the total information

TMPF=$(df -P)
echo $LINE

# Get the sizes and percentage
SIZE=$(echo "${TMPF}" | egrep '^\/dev|@' |awk '{t2 = t2 + $2}END{print t2}')
USED=$(echo "${TMPF}" | egrep '^\/dev|@' |awk '{t3 = t3 + $3}END{print t3}')
AVAI=$(echo "${TMPF}" | egrep '^\/dev|@' |awk '{t4 = t4 + $4}END{print t4}')
PERC=$(echo -e "${USED}*100/${SIZE}\nquit"|bc)

# Set in GB
SIZE=$(echo -e "$SIZE/(1024*1024)\nquit"|bc)
USED=$(echo -e "$USED/(1024*1024)\nquit"|bc)
AVAI=$(echo -e "$AVAI/(1024*1024)\nquit"|bc)
printf "%-${COLS}s\t%8s%8s%8s\n" "All in GB" "${SIZE}G" "${USED}G" "${AVAI}G"

#Set in TB
SIZE=$(echo -e "scale=2\n$SIZE/1024\nquit"|bc)
USED=$(echo -e "scale=2\n$USED/1024\nquit"|bc)
AVAI=$(echo -e "scale=2\n$AVAI/1024\nquit"|bc)
printf "%-${COLS}s\t%8s%8s%8s%8s %-s\n" "All in TB" "${SIZE}T" "${USED}T" "${AVAI}T" "${PERC}%" "@$(uname -mn)"
echo ${LINE}


Regards,
David Bolt

--
Team Acorn: http://www.distributed.net/ OGR-NG @ ~100Mnodes RC5-72 @ ~1Mkeys/s
openSUSE 10.3 32b | openSUSE 11.0 32b | |
openSUSE 10.3 64b | openSUSE 11.0 64b | openSUSE 11.1 64b |
RISC OS 3.6 | RISC OS 3.11 | openSUSE 11.1 PPC | TOS 4.02
.



Relevant Pages