Exclude string from wildcard in bash

Posted by Peter O'Doherty on Stack Overflow See other posts from Stack Overflow or by Peter O'Doherty
Published on 2010-04-27T15:18:38Z Indexed on 2010/04/27 15:33 UTC
Read the original article Hit count: 426

Filed under:

Hi, I'm trying to adapt a bash script from "Sams' Teach Yourself Linux in 24 Hours" which is a safe delete command called rmv. The files are removed by calling rmv -d file1 file2 etc. In the original script a max of 4 files can by removed using the variables $1 $2 $3 $4. I want to extend this to an unlimited number of files by using a wildcard. So I do:

for i in $*
do
mv $i $HOME/.trash
done

The files are deleted okay but the option -d of the command rmv -d is also treated as an argument and bash objects that it cannot be found. Is there a better way to do this?

Thanks, Peter

#!/bin/bash
# rmv - a safe delete program
# uses a trash directory under your home directory
mkdir $HOME/.trash 2>/dev/null
# four internal script variables are defined
cmdlnopts=false
delete=false
empty=false
list=false
# uses getopts command to look at command line for any options
while getopts "dehl" cmdlnopts; do
  case "$cmdlnopts" in
    d ) /bin/echo "deleting: \c" $2 $3 $4 $5 ; delete=true ;;
    e ) /bin/echo "emptying the trash..." ; empty=true ;;
    h ) /bin/echo "safe file delete v1.0"
        /bin/echo "rmv -d[elete] -e[mpty] -h[elp] -l[ist] file1-4" ;;
    l ) /bin/echo "your .trash directory contains:" ; list=true ;;
  esac
done

if [ $delete = true ]
then
  for i in $* 
  do
  mv $i $HOME/.trash
  done
  /bin/echo "rmv finished."
fi
if [ $empty = true ]
then
  /bin/echo "empty the trash? \c"
  read answer
  case "$answer" in
    y) rm -i $HOME/.trash/* ;;
    n) /bin/echo "trashcan delete aborted." ;;
  esac
fi
if [ $list = true ]
then
  ls -l $HOME/.trash
fi

© Stack Overflow or respective owner

Related posts about bash