commit f7fd0b2b7e4adc66752d6701c8a5659630e108e3 Author: Georg Hopp Date: Wed Dec 13 14:09:40 2006 +0000 Initial repository layout diff --git a/rm b/rm new file mode 100755 index 0000000..c2dbef0 --- /dev/null +++ b/rm @@ -0,0 +1,53 @@ +#!/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