summaryrefslogtreecommitdiff
path: root/saferm
diff options
context:
space:
mode:
Diffstat (limited to 'saferm')
-rwxr-xr-xsaferm39
1 files changed, 39 insertions, 0 deletions
diff --git a/saferm b/saferm
new file mode 100755
index 0000000..9a455fa
--- /dev/null
+++ b/saferm
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+archive="$HOME/.deleted"
+realrm="$(which rm)"
+copy="$(which cp) -R"
+
+if [ $# -eq 0 ]; then
+ exec $realrm
+fi
+
+flags=""
+
+while getopts "dfiPRrvW" opt
+do
+ case $opt in
+ f ) exec $realrm "$@" ;;
+ * ) flags="$flags -$opt" ;;
+ esac
+done
+shift $(( $OPTIND - 1 ))
+
+if [ ! -d $archive ]; then
+ if [ ! -w $HOME ]; then
+ echo "$0 failed: can't create $archive in $HOME" >&2
+ exit 1
+ fi
+ mkdir $archive
+ chmod 700 $archive
+fi
+
+for arg
+do
+ newname="$archive/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")"
+ if [ -f "$arg" -o -d "$arg" ]; then
+ $copy "$arg" "$newname"
+ fi
+done
+
+exec $realrm $flags "$@"