Showing
1 changed file
with
53 additions
and
0 deletions
rm
0 → 100755
1 | +#!/bin/bash | |
2 | + | |
3 | +# | |
4 | +# hier ist das komplizierte..(mehr oder weniger) | |
5 | +# alle Kommandozeilenparameter werden geparsed: | |
6 | +# - alle mit - beginnenden kommen nach args | |
7 | +# - alle anderen werden zunächste überprüft ob sie mit einem / beginnen. | |
8 | +# * ist dem so, so werden sie direkt nach cpfiles übernommen. | |
9 | +# * ansonsten beschreiben sie einen relativen pfad und es wird zunächst das | |
10 | +# aktuelle Arbeitsverzeichnis vor diesen gehängt. | |
11 | +# * nach cpfiles kommen sie nur, wenn es sich bei dem Pfad nicht um das | |
12 | +# trash-verzeichnis des users handel ($HOME/trash). | |
13 | +# Würde man das nicht machen, so würden die Dateien auf sich selbst | |
14 | +# kopiert, was eine fehlermeldung von cp zur folge hätte. | |
15 | +# | |
16 | +while true | |
17 | +do | |
18 | + test -z "$1" && break | |
19 | + if eval test \"\${1%${1#?}}\" == \"-\" | |
20 | + then | |
21 | + args="$args $1" | |
22 | + arg="${1//[Rrd]/}" | |
23 | + test "$arg" != "-" && cpargs="$cpargs $arg" | |
24 | + fi | |
25 | + if eval test \"\${1%${1#?}}\" != \"-\" | |
26 | + then | |
27 | + file="$1" | |
28 | + eval test \"\${file%${file#?}}\" != \"/\" && file="$PWD/$file" | |
29 | + | |
30 | + rmfiles="$rmfiles \"$file\"" | |
31 | + test -z "`echo $file | sed '/'${HOME//\//\\\\/}'\/trash/p;d'`" && | |
32 | + cpfiles="$cpfiles \"$file\"" | |
33 | + fi | |
34 | + shift || break | |
35 | +done | |
36 | + | |
37 | +# | |
38 | +# falls es nicht existiert oder kein directory ist trash neu machen | |
39 | +# | |
40 | +test ! -d $HOME/trash && (/usr/bin/rm -Rf $HOME/trash; mkdir $HOME/trash) | |
41 | + | |
42 | +# | |
43 | +# ok, das braucht ein wenig doku. | |
44 | +# ich kopiere Dateien nur nach trash, wenn sie: | |
45 | +# 1. -z: nicht mit f oder i als option gelöscht werden...also | |
46 | +# nicht force und nicht interactive. | |
47 | +# 2. -n: Überhaupt zu kopierende Dateien existieren. | |
48 | +# | |
49 | +test -z "`echo "$args" | sed '/-[a-zA-z0-9]*[fi][a-zA-Z0-9]*/p;d'`" -a \ | |
50 | + -n "$cpfiles" && \ | |
51 | + eval mv $cpargs $cpfiles $HOME/trash | |
52 | + | |
53 | +eval /usr/bin/rm -f $args $rmfiles | ... | ... |
Please
register
or
login
to post a comment