Initial import
This commit is contained in:
193
disk-space_usage.sh
Executable file
193
disk-space_usage.sh
Executable file
@@ -0,0 +1,193 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user