Copying a Directory Structure to a new structure

Hi all

Is it possible to copy a structure of a directory only.
e.g.
I have a file with the following entries that is a result of a find :-
/dir1/dir2/file.dbf
/dir1/dir2/dir3/file1.dbf
/dir1/file.dbf

I want to copy these to a directory and keep the structure however starting at a new dir :
/newdir/dir1/dir2/file.dbf
/newdir/dir1/dir2/dir3/file1.dbf
/newdir/dir1/file.dbf

when I use the cp -R command, the problem is that because there is a file, it just copies the file and not the structure.

Regards
J

Your post is similiar to this

Use tar

vino

Found from http://www.tldp.org/LDP/abs/html/special-chars.html\#BGLOOP

Quoting word-to-word from the above url.

redirection from/to stdin or stdout [dash].

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)
# Move entire file tree from one directory to another
# [courtesy Alan Cox <a.cox@swansea.ac.uk>, with a minor change]

# 1) cd /source/directory    Source directory, where the files to be moved are.
# 2) &&                     "And-list": if the 'cd' operation successful, then execute the next command.
# 3) tar cf - .              The 'c' option 'tar' archiving command creates a new archive,
#                            the 'f' (file) option, followed by '-' designates the target file as stdout,
#                            and do it in current directory tree ('.').
# 4) |                       Piped to...
# 5) ( ... )                 a subshell
# 6) cd /dest/directory      Change to the destination directory.
# 7) &&                     "And-list", as above
# 8) tar xpvf -              Unarchive ('x'), preserve ownership and file permissions ('p'),
#                            and send verbose messages to stdout ('v'),
#                            reading data from stdin ('f' followed by '-').
#
#                            Note that 'x' is a command, and 'p', 'v', 'f' are options.
# Whew!



# More elegant than, but equivalent to:
#   cd source/directory
#   tar cf - . | (cd ../dest/directory; tar xpvf -)
#
# cp -a /source/directory /dest/directory     also has same effect.


Vino

MY apologies, but what I forgot to mention is that I dont want all the files in the tree.
e.g.
/dir1/dir2/file1.dbf
/dir1/dir2/dir3/file2.dbf
/dir1/file3.dbf
/dir1/dir2/anotherfile.txt
/dir1/dir2a/file2a.dbf
to

/dir1/dir2/file1.dbf
/dir1/dir2/dir3/file2.dbf
/dir1/file3.dbf
/dir1/dir2a/file2a.dbf

THanx

J

I assume that your find is something like this

find /dir1 -name '*.dbf'

In that case, use

tar cvf - `find /dir1 -name '*.dbf'` > dir1.tar

Whatever your find is, put it betwen the backticks ` `.

Go to /newdir and untar the dir1.tar

vino

Hi Vino

Thanks for the responses. What if I have my source listed in a file and want to use the for loop to do the copy. As mentioned, the copy works, but unfortunately does not copy the structure and only the file in the target dir.

Thanks

J

tar cvf - `find /dir1 -name '*.dbf'` > dir1.tar

So you are saying this doesnt work at all, i.e. it doesnt duplicate the directory structure ??

vino

It works fine.

Thanx

If you have a file which has the results of the find, use this.

#! /bin/sh

: >dir1.tar

while read file
do
tar rf dir1.tar $file
done < find.results.txt

vino