hflag=no # help nflag=no # nodelete - do not delete files rflag=no # recursion pflag=no # pyc - consider .pyc file vflag=no # list files (performs delete anyway) aflag=no # all - flags r + p + m mflag=no # vim - consider .swp, .swo, swn dflag=no # specify directory # directory="" startdir=$PWD TMP=/tmp/bak`date +%s` # esc_bold='\033[1m' # http://en.wikipedia.org/wiki/ANSI_escape_code#CSI_Codes esc_reset='\033[0m' esc_red='\033[91m' esc_green='\033[92m' # #################################################################################### # GETOPT # set -- $(getopt hnmrpva "$@") while [ $# -gt 0 ] do case "$1" in -h) hflag=yes;; -n) nflag=yes;; -r) rflag=yes;; -p) pflag=yes;; -m) mflag=yes;; -v) vflag=yes;; -a) pflag=yes; mflag=yes; rflag=yes;; --) shift; break;; -*) echo "$0: error - unrecognized option $1" 1>&2; return;; *) break;; esac shift done #################################################################################### # HELP FLAG # print help and exit if [ $hflag = yes ]; then echo echo -e "${esc_bold}Usage:${esc_reset} bak [-hnrpva] [DIRECTORY]" echo -e " Deletes backup files ( *~ )" echo -e " If no DIRECTORY deletes in current directory" echo echo -e "${esc_bold}Options:${esc_reset}" echo -e " ${esc_green}-h${esc_reset} Display this help" echo -e " ${esc_green}-n${esc_reset} Dry run (${esc_green}no delete will occur${esc_reset})" echo -e " ${esc_green}-r${esc_reset} Recursive" echo -e " ${esc_green}-p${esc_reset} Deletes also .pyc" echo -e " ${esc_green}-m${esc_reset} Deletes also VIM files (${esc_red}backup & swap${esc_reset})" echo -e " ${esc_green}-v${esc_reset} Verbose (lists files)" echo -e " ${esc_green}-a${esc_reset} Alias for -rpm" echo return fi #################################################################################### # PREPARE # Directory directory=${1:-$PWD} # check if given directory is a directory if [ ! -d $directory ] ; then echo "'$directory' is not a directory" return fi # Recursion depth='-maxdepth 1' andits='' if [ $rflag = yes ]; then depth="" #recursive andits=' and its subdirectories' fi #################################################################################### # EXEC cd $directory #list files in TMP file find . -name "*~" -type f ${=depth} -exec echo "\"{}\"" \; > $TMP 2> /dev/null if [ $pflag = yes ]; then find . -name \*.pyc -type f ${=depth} -exec echo "\"{}\"" \; >> $TMP 2> /dev/null fi if [ $mflag = yes ]; then find . \( -name \*.swp -or -name \*.swo -or -name \*.swn \) ${=depth} -exec echo "\"{}\"" \; >> $TMP 2> /dev/null fi FILES=`wc -l $TMP | cut -d/ -f1 | sed 's/[ ]//g' ` if [ ${FILES} -ge 1 ] ; then if [ $vflag = yes ]; then # list files echo "Deleted files:" cat -n $TMP | sed 's/"//g' echo fi if [ ${FILES} = 1 ]; then label_file="file" else label_file="files" fi if [ $nflag = no ]; then cat $TMP | xargs rm -f #delete echo -e " ${esc_red}$FILES bak ${label_file}${esc_reset} deleted in ${esc_green}$directory${esc_reset}$andits" else echo -e " ${esc_green}$FILES bak ${label_file}${esc_reset} ${esc_red}listed${esc_reset} in ${esc_green}$directory${esc_reset}$andits" fi else echo -e " ${esc_green}No bak files${esc_reset} listed in ${esc_green}$directory${esc_reset}$andits" fi #remove TMP file rm -f $TMP # return to startdir cd $startdir unset startdir unset directory # vim: set ts=4 sw=4 tw=0 ft=zsh :