#!/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