This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Space in Dir Name with shell script and tar

From: "Troy" <>
To: <>
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


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"

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:
Sent from the Cygwin Users mailing list archive at

-- Unsubscribe info: Problem reports: Documentation: FAQ:

-- Unsubscribe info: Problem reports: Documentation: FAQ:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]