zsh/zsh.d/zshfunctions/bak

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 :