Ever find yourself in the position of having accidentally erased an entire directory from your Zaurus, along with it's contents, and not want to use Sharp's
backup utility to take your entire Zaurus back to last week's or last month's backup?
As I mentioned in my post about retrieving single files from Sharp's
backup, the backups in Sharp ROM 2.38
are simple tar
files. In the discussion below, I will show how to extract just a single directory.
This will need to be done from a console or terminal application. If you do not have one, then see my discussion at http://www.sdjf.esmartdesign.com/tutorial.html.
The first step is to get the name and location of your most recent backup. You can do this with the find
command. An advantage of using the find
command to do this, is that it will find your backups wherever they are on your system, whether they are on a CF card or SD card or both.
bash-2.05# find / -name "*.backup"
/mnt/card/2007-03-05-08-30.backup
/mnt/card/2007-04-15-09-27.backup
/mnt/card/2007-05-01-10-28.backup
/mnt/cf/2006-12-10-19-51.backup
/mnt/cf/2006-12-11-22-03.backup
/mnt/cf/2006-12-22-01-36.backup
bash-2.05#
In my case, I already know my most recent
backups were made in June 2007, and are on my CF card.
So, I will just use the find
command to search for backup filenames starting with "2007-06" which are
located on my CF card:
bash-2.05# find /mnt/cf/ -name "2007-06*.backup"
/mnt/cf/2007-06-05-09-23.backup
/mnt/cf/2007-06-12-08-55.backup
/mnt/cf/2007-06-21-09-19.backup
bash-2.05#
Alternately, I could just use the "ls" command to show me the names of the most recent backups on my CF card. This time, I am piping
the results through the "head -n3" command, so I just get the names of my three most recent backups:
bash-2.05# ls -t /mnt/cf/*backup| tail -n3
/mnt/cf/2007-06-05-09-23.backup
/mnt/cf/2007-06-12-08-55.backup
/mnt/cf/2007-06-21-09-19.backup
bash-2.05#
If you do not know how to type a pipe
on the sl5500's hardware keyboard, you can type a
pipe
by simultaneously pressing the
space key and the
up arrow key (which is on the left side of your keyboard,
above the function (Fn) key).
Once you decide which backup to use, you need to to get a listing of the precise pathname to the directory you want.
In this example, I want the contents of just one directory.
The output will be long because there are many files in this directory. So,
I am first piping
the output of tar's
listing through
grep so I can locate the pathname
quickly. I then also pipe
that output through the "head" command, which shows me the
path to the directory, and the first 9 files in it.
bash-2.05# tar -tf /mnt/cf/2007-06-21-09-19.backup | grep Drafts | grep cur | head
home/root/tkcMail/Drafts/cur/
home/root/tkcMail/Drafts/cur/1179768889.24440_3.localhost!2,
home/root/tkcMail/Drafts/cur/1179736695.18173_0.localhost!2,
home/root/tkcMail/Drafts/cur/1179462638.31418_0.localhost!2,
home/root/tkcMail/Drafts/cur/1179325232.14005_0.localhost!2,
home/root/tkcMail/Drafts/cur/1179499910.2815_1.localhost!2,S
home/root/tkcMail/Drafts/cur/1179462638.31418_4.localhost!2,
home/root/tkcMail/Drafts/cur/1180498212.8549_1.localhost!2,
home/root/tkcMail/Drafts/cur/1180714380.2954_0.localhost!2,
home/root/tkcMail/Drafts/cur/1180305426.5025_0.localhost!2,
bash-2.05#
While I could have achieved the same results in
this case by using a "head -n1"
, the
above example can be used to confirm you have the
right directory before extracting it. If you are
sure your sequence of grep's is correct,
then the following is an option:
bash-2.05# tar -tf /mnt/cf/2007-06-21-09-19.backup | grep Drafts | grep cur | head -n1
home/root/tkcMail/Drafts/cur/
bash-2.05#
A more complex way to get the pathname, for those of you who know sed, is
to pipe
the output of tar's
listing through grep and sed where I delete all lines containing the files in "cur".
It is unnecessarily complex in this particular
example, but might be handy in other cases:
bash-2.05# tar -tf
/mnt/cf/2007-06-21-09-19.backup | grep Drafts | grep cur | sed '|cur/*|d' home/root/tkcMail/Drafts/cur/
home/root/tkcMail/Drafts/cur
bash-2.05#
I still have trouble extracting subdirectory contents from a tar
file in a way that does not result in extra, unwanted subdirectories. So I will first extract the files to a temporary working directory created just for this purpose, and then move just what I need to the appropriate directory on my Zaurus itself.
Note that before I do that, I am change my working directory to that temporary directory, using the "cd" command.
If you do not have a suitable temporary directory, you can make one with the mkdir command:
bash-2.05# mkdir /mnt/cf/temporary-dir-name
In this example, I have already created a directory called "/mnt/cf/Drafts". I am changing my working directory to that special directory, and I am then asking tar to extract just the contents I need as follows, putting the output in the temporary directory on my cf card:
bash-2.05# cd /mnt/cf/Drafts
-------snip--------
bash-2.05# tar -xvf /mnt/cf/2007-06-21-09-19.backup home/root/tkcMail/Drafts/cur/* &
bash-2.05# home/root/tkcMail/Drafts/cur/
home/root/tkcMail/Drafts/cur/1179768889.24440_3.localhost!2,
home/root/tkcMail/Drafts/cur/1179736695.18173_0.localhost!2,
home/root/tkcMail/Drafts/cur/1179462638.31418_0.localhost!2,
home/root/tkcMail/Drafts/cur/1179325232.14005_0.localhost!2,
home/root/tkcMail/Drafts/cur/1179499910.2815_1.localhost!2,S
home/root/tkcMail/Drafts/cur/1179462638.31418_4.localhost!2,
The files I wanted were extracted to the directory on my CF card called /mnt/cf/Drafts/home/root/tkcMail/Drafts/cur.
If you have gotten lost trying to follow the above examples, the syntax for extracting the entire contents of a subdirectory is:
tar -xvf exact-path-to-backup-file exact-path-to-desired-directory/* &
Note that I have seen instructions, elsewhere on the web, to use the command "tar xvf backupname subdirname",
but BusyBox's tar
command on my Sharp ROM,
a minus sign is necessary. I also found that I have to use an asterisk (*), to get tar
to unpack the contents of a directory.
I then can copy the files in the Drafts directory on my CF card into place in internal memory:
bash-2.05# cp -p /mnt/cf/Drafts/home/root/tkcMail/Drafts/cur/* /home/root/tkcMail/Drafts/cur
bash-2.05#
Or I can move the files into place, in internal memory, as follows:
bash-2.05# mv /mnt/cf/Drafts/home/root/tkcMail/Drafts/cur/* /home/root/tkcMail/home/root/tkcMail/Drafts/cur
I was sorry my last backup was two weeks before this happened, so my most recent work was not retrievable, but at least the other drafts I had been working on are now available to me.
sdjf
Page last updated April 27, 2008
This page is http://
Home page of this site is http://sdjf.esmartdesign.com