mirror of https://github.com/akelge/zsh
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 :
|