#!/bin/bash
# /usr/local/bin/dudir
# https://crystalfaeries.net/posix/bin/dudir
# celeste:crystalfaery DUDIR 2017-12-07 16:43:19+00:00
# "du" (disk usage) of a "dir" (directory tree)
# sorted in descending order of size
touch .du.txt .tree.txt
if [ $? -ne 0 ]
then
echo "$0 ERROR: Require Permissions to write .du.txt and .tree.txt" 1>&2
sudo touch .du.txt .tree.txt
sudo chmod 660 .du.txt .tree.txt
sudo chown `whoami`:staff .du.txt .tree.txt # your CONFIG may prefer different user:group
fi
if [ $# -eq 0 ]
then # if no command-line arguments (dirs) then do only cwd
pwd > .tree.txt
/usr/bin/tree -dx | tail -n +2 >> .tree.txt&
~/bin/df --full > .du.txt
du -L -s -x $(pwd)/ | sed 's/[0-9][0-9][0-9] /M /g ; s/\/$/:/' >> .du.txt
du -L -a -S -x | sed 's/\.\///g' | sort -rn | grep -v '.*\/$' >> .du.txt
exit
fi
while [ $# -gt 0 ]
do # for each directory listed on the command line
cd ${1} || exit 1
pwd > .tree.txt
/usr/bin/tree -dx | tail -n +2 >> .tree.txt&
~/bin/df --full > .du.txt
du -L -s -x $(pwd)/ | sed 's/[0-9][0-9][0-9] /M /g ; s/\/$/:/' >> .du.txt
du -L -a -S -x | sed 's/\.\///g' | sort -rn | grep -v '.*\/$' >> .du.txt
shift # next command-line argument
done
syntax highlighted by Code2HTML, v. 0.9.1