You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.7 KiB
53 lines
1.7 KiB
#!/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
|