[Box Backup] sillyrestore.bash
Justin H Haynes
boxbackup@fluffy.co.uk
Mon, 28 Feb 2005 22:27:44 -0600
I wasn't paying attention and started bbackupd before trying to restore
all my files to my laptop. Oops. Thankfully the files were still there
and marked as deleted. It was just a bit more tedious to get them back
because there isn't a fast way to do that kind of a restore yet.
If anyone else has this problem, until the client features are there,
you might find this script useful. I needed to write it so I didn't
have to individually restore 17000 files with bbackupquery by hand.
If I have already posted this, I'm sorry. I thought I had posted it a
couple of weeks ago, but when I checked the archives, I didn't find it:
bash-3.00$ cat sillyrestore.bash
#!/bin/bash
# This is sillyrestore.bash
#
# This is one tool you can use if you lamely intended
# to restore all your files, but instead started bbackupd
# and marked them all deleted.
#
# This script is sloppy and inefficient and connects with bbackupquery
# for each and every file. It also blindly tries to create directories
# without even checking. It is provided as a skeleton.
#
# sillyrestore.bash expects get.txt produced like this (which you
# probably need to do as root or as the user who runs the client):
#
# bbackupquery "ls -rdo" > get.txt
#
# sillyrestore.bash creates absolute paths. So if home/justin/whatever.txt
# exists on the store, then it will be restored as /home/justin/whatever.txt
# change this if you want.
echo populate ids
count=0
for i in `cat get.txt | awk '{print $1}'`
do
ids[$count]=$i
count=$[$count + 1]
done
echo populate files
count=0
for i in `cat get.txt | awk '{print $3}'`
do
files[$count]=$i
count=$[$count + 1]
done
maxcount=`expr $count - 1`
count=0
while test $count -le $maxcount
do
dirname=`dirname ${files[$count]}`
basename=`basename ${files[$count]}`
mkdir -p /$dirname
chown -R justin:justin /$dirname
echo bbackupquery \"cd -do /$dirname\" \"lcd /$dirname\" \"get -i
${ids[$count]} $basename\"
bbackupquery "cd -do /$dirname" "lcd /$dirname" "get -i ${ids[$count]}
$basename" "exit"
count=$[$count + 1]
done
bash-3.00$