194 lines
3.9 KiB
Bash
Executable File
194 lines
3.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
SUMMERY=false
|
|
|
|
right_tabstop=30
|
|
|
|
warn (){
|
|
echo ""
|
|
echo -e " [ Warning ] $*"
|
|
echo ""
|
|
}
|
|
|
|
function usage() {
|
|
echo
|
|
[ -n "$1" ] && echo -e "Error: $1\n"
|
|
|
|
cat<<EOF
|
|
|
|
Usage: `basename $0` [-oq] <dir>
|
|
|
|
|
|
Prints out a summary of disk space usage for a given directory.
|
|
|
|
The Output contains also the amount of diskspace usage of the
|
|
subdirectories.
|
|
|
|
|
|
Options:
|
|
|
|
-o <directory>
|
|
A summary file will be stored in the given directory. The filename contains
|
|
the directory name of the determined directory and also a timestamp in human
|
|
readable form.
|
|
|
|
-q
|
|
Suppresses the output to stdout. Only useful in conjunction with "-o"
|
|
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
_be_quiet=false
|
|
_output_to_file=false
|
|
while getopts o:q opt ; do
|
|
case $opt in
|
|
q) _be_quiet=true
|
|
;;
|
|
o) _output_to_file=true
|
|
if [ -d "$OPTARG" ]; then
|
|
_out_dir=$OPTARG
|
|
else
|
|
usage "Output directory not found"
|
|
fi
|
|
;;
|
|
h) usage
|
|
;;
|
|
\?) usage
|
|
esac
|
|
done
|
|
|
|
shift `expr $OPTIND - 1`
|
|
|
|
if [ $# -eq 0 ]; then
|
|
usage "Missing parameter for \"<dir>\""
|
|
elif [ $# -gt 1 ]; then
|
|
usage "To many parameters given"
|
|
fi
|
|
|
|
base_dir=$1
|
|
|
|
if [ ! -d $base_dir ]; then
|
|
usage "Directory \"$base_dir\" not found!"
|
|
fi
|
|
|
|
if $_output_to_file ; then
|
|
_out_file="${_out_dir}/`basename \"$base_dir\"`_space_usage.`date +%Y%m%d-%H%M`"
|
|
touch $_out_file
|
|
fi
|
|
|
|
if $_be_quiet && ! $_output_to_file ; then
|
|
warn "You have told me to be quiet (-q), but gives no output directory."
|
|
exit
|
|
fi
|
|
|
|
## - print out
|
|
## -
|
|
outnl(){
|
|
|
|
echo X\\c > /tmp/shprompt$$
|
|
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
|
|
if $_output_to_file ; then
|
|
echo -e "$*\\c" >> $_out_file
|
|
fi
|
|
if ! $_be_quiet ; then
|
|
echo -e "$*\\c" 1>&2
|
|
fi
|
|
else
|
|
if $_output_to_file ; then
|
|
echo -e "$*" >> $_out_file
|
|
fi
|
|
if ! $_be_quiet ; then
|
|
echo -e "$*" 1>&2
|
|
fi
|
|
fi
|
|
rm /tmp/shprompt$$
|
|
}
|
|
|
|
|
|
outnl ""
|
|
outnl "Disk Space Usage Directory \"$base_dir\":"
|
|
outnl ""
|
|
|
|
cd $backup_base_dir
|
|
|
|
## - Read list of (sub)directories inside $base_dir into
|
|
## - an array.
|
|
## -
|
|
dir_list_arr=()
|
|
while IFS='' read -r -d '' _dir; do
|
|
dir_list_arr+=($_dir);
|
|
done < <(find $base_dir -mindepth 1 -maxdepth 1 -type d -print0)
|
|
|
|
## - Sort the array
|
|
## -
|
|
dir_list_sorted_arr=()
|
|
readarray -t dir_list_sorted_arr < <(for a in "${dir_list_arr[@]}"; do echo "$a"; done | sort)
|
|
|
|
|
|
for _dir in "${dir_list_sorted_arr[@]}"; do
|
|
|
|
## - Determin space usage of $_dir
|
|
## -
|
|
_out_du=$(du -sh "$_dir")
|
|
|
|
_space=`echo ${_out_du} | cut -d ' ' -f1`
|
|
_host=`basename "$_dir"`
|
|
|
|
|
|
## - Formatted Output
|
|
## -
|
|
## - Determin number of signs between directory name
|
|
## - and directory size
|
|
## -
|
|
_strlen=${#_host}
|
|
_count_blank=`expr $right_tabstop - $_strlen`
|
|
_str_blanks=""
|
|
while [ $_count_blank -gt 2 ]; do
|
|
_str_blanks="${_str_blanks}."
|
|
_count_blank=`expr $_count_blank - 1`
|
|
done
|
|
_str_blanks="${_str_blanks}: "
|
|
_outstring="\t${_host}${_str_blanks}${_space}"
|
|
outnl "$_outstring"
|
|
done
|
|
|
|
## - Summary
|
|
## -
|
|
if $SUMMERY ; then
|
|
|
|
## - overall usage of directory $$base_dir
|
|
## -
|
|
_overall_usage=`du -sh $base_dir | awk '{print$1}'`
|
|
|
|
## - Print Summary Line
|
|
## -
|
|
_strlen=${#_overall_usage}
|
|
_count_blank=`expr $right_tabstop + $_strlen`
|
|
_str_blanks=""
|
|
_outstring="\t"
|
|
while [ $_count_blank -gt 0 ]; do
|
|
_str_blanks="${_str_blanks}. "
|
|
_count_blank=`expr $_count_blank - 1`
|
|
_outstring="${_outstring}="
|
|
done
|
|
outnl ""
|
|
outnl "$_outstring"
|
|
|
|
|
|
## - Print Summary
|
|
## -
|
|
_strlen=${#base_dir}
|
|
_count_blank=`expr $right_tabstop - $_strlen`
|
|
_str_blanks=""
|
|
while [ $_count_blank -gt 0 ]; do
|
|
_str_blanks="${_str_blanks} "
|
|
_count_blank=`expr $_count_blank - 1`
|
|
done
|
|
_outstring="\t${base_dir}${_str_blanks}${_overall_usage}"
|
|
outnl "$_outstring"
|
|
fi
|
|
outnl
|
|
|
|
exit 0
|