Mail Archives: cygwin/2007/01/17/21:43:16
From: "Troy" <talexander AT veeco DOT com>
To: <cygwin AT cygwin DOT com>
Sent: Thursday, January 18, 2007 2:50 AM
Subject: Space in Dir Name with shell script and tar
>
> I am trying to make a shell script to do automatic bckups with tar.
>
> My problem is that tar stumbles on the spaces in the dir names if they are
> in a variable.
>
> Probiably best shown by example
>
> The dir I want to back up is
> g:/Mark I+/Experimental Data/
>
> I if do this in the script
> tar -czvpf $NAME_OF_BACKUP.tgz /cygdrive/g/Mark' 'I+/Experimental' 'Data/*
Try this:
tar -czvpf $NAME_OF_BACKUP.tgz "/cygdrive/g/Mark I+/Experimental Data"
That is, enclose the name of the directory in double quotation marks, and
drop the trailing /*
> it works fine but if I do this
>
> DIRECTORY_TO_BACKUP="/cygdrive/g/Mark' 'I+/Experimental' 'Data"
Problem: You are enclosing the apostrophes in the double quotation marks.
That means the
apostrophes become part of the value of the variable DIRECTORY_TO_BACKUP
> tar -czvpf $NAME_OF_BACKUP.tgz $DIRECTORY_TO_BACKUP/*
Problem: Bash will replace the variable name with the variable's value, but
it will not interpret
the apostrophes specially. Interpretation of apostrophes occur at an earlier
stage. Next, bash
will perform word splitting on the variable's value. This means that the
spaces contained in
the variable's value will be treated specially, as word splitting points.
Try this
DIRECTORY_TO_BACKUP="/cygdrive/g/Mark I+/Experimental Data"
tar -czvpf $NAME_OF_BACKUP.tgz "$DIRECTORY_TO_BACKUP"
i.e., enclose the variable's assigned value in double quotation marks (or
apostrophes, if you prefer,
but for your convenience, use a single pair around all of the value. Next,
enclose the variable
substitution in double quotation marks. This time it must be double quotes,
not apostrophes,
since apostrophes prevent variable substitution.
You can tack /* at the end if you want, like this "$DIR"/* but if you want
to back up everything
in the directory it is better to leave out /*. With /*, files and
directories whose names begin with
a dot (like .bashrc) are *not* included in the backup. (This applies to
files at the top level.
A file named "$DIR"/some-subdir/.bashrc is backed up with or without /*.)
>
> I get
> tar: Removing leading `/' from member names
This is normal. You are specifying absoluth paths, and then, upon restore,
you would be forced
to restore to exactly the same path. When tar removes the leading / it
becomes possible to
restore the data to a different directory, eg to /restored/cygdrive/c/...
Here you see another point. It is better to do
cd "$DIR"
tar cvfpz bakupname.tgz .
with a single dot as the backup directory. Then, upon restore, you do not
need to have a prefix
of directories cygdrive/c/...
> tar: /cygdrive/g/Mark': Cannot stat: No such file or directory
> tar: 'I+/Experimental': Cannot stat: No such file or directory
> tar: 'Data/*: Cannot stat: No such file or directory
> tar: Error exit delayed from previous errors
>
> What am I doing wrong?
> --
> View this message in context:
> http://www.nabble.com/Space-in-Dir-Name-with-shell-script-and-tar-tf3031755.html#a8423703
> Sent from the Cygwin Users mailing list archive at Nabble.com.
>
>
> --
> Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
> Problem reports: http://cygwin.com/problems.html
> Documentation: http://cygwin.com/docs.html
> FAQ: http://cygwin.com/faq/
>
>
>
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -