mydir="$HOME/.deleted-files"
realrm="/bin/rm"
move="/bin/mv"
dest=$(pwd)
if [ ! -d $mydir ]; then
echo "$0: No deleted files directory: nothing to unrm" >&2
exit 1
fi
cd $mydir
if [ $# -eq 0 ]; then
echo "Contents of your deleted files archive (sorted by date):"
ls -Fc | sed -e 's/\([[:digit:]][[:digit:]]\.\)\{5\}//g' -e 's/^/ /'
exit 0
fi
matches="$(ls *"$1" 2> /dev/null | wc -l)"
if [ $matches -eq 0 ]; then
echo "No match for \"$1\" in the deleted file archive." >&2
exit 1
fi
if [ $matches -gt 1 ]; then
echo "More then file or directory match in the archive:"
index=1
ls -td *"$1" | while read name; do
datetime="$(echo $name | cut -c1-14 | \
awk -F. '{ print $5"/"$4" at "$3":"$2":"$1 }')"
if [ -d "$name" ]; then
size="$(ls "$name" | wc -l | sed 's/[^[:digit:]]//g')"
echo " $index) $1 (contents = ${size} items, deleted = $(datetime)"
else
size="$(ls -sdk1 "$name" | awk '{ print $1}')"
echo " $index) $1 (size = ${size}Kb, deleted = $datetime)"
fi
index=$(( $index + 1))
done
echo ""
echo -n "Which version of $1 do you want to restore ('0' to quit)? [1]: "
read desired
if [ ${desired:=1} -gt $matches ]; then
echo "$0: Restore cancelled by user: index value too big." >&2
exit 1
fi
if [ $desired -lt 1 ]; then
echo "$0: Restore cancelled by user." >&2
exit 1
fi
restore="$(ls -td *"$1" | sed -n "${desired}p")"
if [ -e "$dest/$1" ]; then
echo "\"$1\" already exists in this derectory. Cannot overwrite." >&2
exit 1
fi
echo -n "Restoring file \"$1\" ..."
$move "$restore" "$dest/$1"
echo "done."
echo -n "Delete the additional copies of this file? [y] "
read answer
if [ ${answer:=y} = "y" ]; then
$realrm -rf *"$1"
echo "deleted."
else
echo "additional copies retained."
fi
else
if [ -e "$dest/$1" ]; then
echo "\"$1\" already exists in this derectory. Cannot overwrite." >&2
exit 1
fi
restore="$(ls -d *"$1")"
echo -n "Restoring file \"$1\"..."
$move "$restore" "$dest/$1"
echo "done."
fi
exit 0
$ ./unrm.sh
Contents of your deleted files archive (sorted by date):
ragged.txt
ragged.txt
$ ./unrm.sh ragged.txt
More then file or directory match in the archive:
1) ragged.txt (size = 0Kb, deleted = 12/14 at 15:05:50)
2) ragged.txt (size = 4Kb, deleted = 12/14 at 13:37:30)
Which version of ragged.txt do you want to restore ('0' to quit)? [1]: 0
./unrm.sh: Restore cancelled by user.
$ ./unrm.sh ragged.txt
More then file or directory match in the archive:
1) ragged.txt (size = 0Kb, deleted = 12/14 at 15:05:50)
2) ragged.txt (size = 4Kb, deleted = 12/14 at 13:37:30)
Which version of ragged.txt do you want to restore ('0' to quit)? [1]: 1
50.05.15.14.12.ragged.txt 64
Restoring file "ragged.txt" ...done.
Delete the additional copies of this file? [y] y
deleted.
$ ls
colors.sh newrm.sh normdate.sh valid_date.sh validint.sh
echon.sh nfmt.sh ragged.txt validalphanum.sh
inpath.sh nicenumber.sh unrm.sh validfloat.sh