rm 1.69 KB
#!/bin/bash

#
# hier ist das komplizierte..(mehr oder weniger)
# alle Kommandozeilenparameter werden geparsed:
# - alle mit - beginnenden kommen nach args
# - alle anderen werden zunächste überprüft ob sie mit einem / beginnen.
#    * ist dem so, so werden sie direkt nach cpfiles übernommen.
#    * ansonsten beschreiben sie einen relativen pfad und es wird zunächst das
#      aktuelle Arbeitsverzeichnis vor diesen gehängt.
#    * nach cpfiles kommen sie nur, wenn es sich bei dem Pfad nicht um das
#      trash-verzeichnis des users handel ($HOME/trash).
#      Würde man das nicht machen, so würden die Dateien auf sich selbst
#      kopiert, was eine fehlermeldung von cp zur folge hätte.
#
while true
do
	test -z "$1" && break
	if eval test \"\${1%${1#?}}\" == \"-\" 
	then
		args="$args $1"
		arg="${1//[Rrd]/}"
		test "$arg" != "-" && cpargs="$cpargs $arg"
	fi
	if eval test \"\${1%${1#?}}\" != \"-\" 
	then
		file="$1"
		eval test \"\${file%${file#?}}\" != \"/\" && file="$PWD/$file"

		rmfiles="$rmfiles \"$file\""
		test -z "`echo $file | sed '/'${HOME//\//\\\\/}'\/trash/p;d'`" &&
			cpfiles="$cpfiles \"$file\""
	fi
	shift || break
done

#
# falls es nicht existiert oder kein directory ist trash neu machen
#
test ! -d $HOME/trash && (/usr/bin/rm -Rf $HOME/trash; mkdir $HOME/trash)

#
# ok, das braucht ein wenig doku.
# ich kopiere Dateien nur nach trash, wenn sie:
# 1. -z: nicht mit f oder i als option gelöscht werden...also
#        nicht force und nicht interactive.
# 2. -n: Überhaupt zu kopierende Dateien existieren.
#
test -z "`echo "$args" | sed '/-[a-zA-z0-9]*[fi][a-zA-Z0-9]*/p;d'`" -a \
     -n "$cpfiles" && \
	eval mv $cpargs $cpfiles $HOME/trash

eval /usr/bin/rm -f $args $rmfiles