-
Notifications
You must be signed in to change notification settings - Fork 0
/
15-newrm
56 lines (45 loc) · 1.53 KB
/
15-newrm
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
#!/bin/bash
# newrm--A replacement for the existing rm command.
# This script provides a
# rudimentary unremove capability by creating and utilizing a new
# directory within the user's home directory. It can handle directories
# of content as well as individual files. If the user specifies
# the -f flag, files are removed and NOT archived.
# Big Important Warning: You'll want a cron job or something similar to keep
# the trash directories tamed. Otherwise, nothing will ever actually
# be deleted from the system, and you'll run out of disk space!
archivedir="$HOME/.deleted-files"
realrm="$(which rm)"
copy="$(which cp) -R"
if [ $# -eq 0 ] ; then # let 'rm' output the usage error
exec $realrm # our shell is replaced by /bin/rm
fi
# Parse all options looking for '-f'
flags=""
while getopts "dfiPRrvW" opt
do
case $opt in
f ) exec $realrm "$@" ;; # exec lets us exit this script directly.
* ) flags="$flags -$opt" ;; # other flags are for 'rm', not us
esac
done
shift $(( $OPTIND - 1 ))
# BEGIN MAIN SCRIPT
# =================
# Make sure that the $archivedir exists
if [ ! -d $archivedir ] ; then
if [ ! -w $HOME ] ; then
echo "$0 failed: can't create $archivedir in $HOME" >&2
exit 1
fi
mkdir $archivedir
chmod 700 $archivedir# a little bit of privacy, please
fi
for arg
do
newname="$archivedir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")"
if [ -f "$arg" -o -d “$arg” ] ; then
$copy "$arg" "$newname"
fi
done
exec $realrm $flags "$@" # our shell is replaced by realrm