mirror of
				https://github.com/akelge/vim
				synced 2025-11-03 23:14:25 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			132 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
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 : 
 |