-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrm_replacement.sh
executable file
·63 lines (58 loc) · 1.43 KB
/
rm_replacement.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash
#
### rm replacement, moves files to trash dir
#
# Add alias rm="/path/to/script/rm_replacement.sh" to .bashrc or alike
#
# Based on a script found on the interwebz, cant find the source anymore
### Settings
trash="$HOME/.trash/"
OPTIND=1
force=""
rmFlags=""
mvFlags=""
### Main
while getopts ":frRvh" args; do
case "$args" in
f)
force=1 ;;
r|R)
rmFlags="$rmFlags -r" ;;
v)
rmFlags="$rmFlags -v"
mvFlags="$mvFlags -v" ;;
h)
echo "You are running a replacement for rm called by an alias"
echo "Usage rm [options] file1 file2 ..."
echo ""
echo "Moves files and directories to $trash"
echo ""
echo "Flags:"
echo " -v verbose mode"
echo " -f force processing with /bin/rm"
echo " -r, -R runs /bin/rm in recursive mode"
echo " -h this help message"
echo ""
exit 0 ;;
\?)
echo "Invalid argument: -$OPTARG" >&2
exit 1 ;;
esac
done
shift $((OPTIND-1))
for file in "$@"; do
if [[ $force -eq 1 ]]; then
/bin/rm -f $rmFlags "$file"
else
if [[ -e "$file" ]]; then
if [[ -e "$trash$(basename $file)" ]]; then
version=2
while [[ -e "$trash$(basename $file)_$version" ]]; do
let version=$version+1
done
mv $mvFlags "$trash$(basename $file)" "$trash$(basename $file)_$version"
fi
mv $mvFlags "$file" "$trash"
fi
fi
done