SMOLNET PORTAL home about changes
It's sometimes necessary to copy a  directory tree from one place to
another, preserving  the directory structure, while  not copying the
contents of the directories themselves. This is actually fairly easy
to do  with rsync. We're going  to go through an  example of copying
the 'src' directory  into 'dst'. Because we would like  to test this
first to  make sure it  will work,  we'll take advantage  of rsync's
dry-run feature. Here is the command:

```
rsync -av -n --include='*/' --exclude='*' src/ dst
```

And here  is the source directory  tree, with a few  files thrown in
for good measure:

```
thinknix@ser:~/tmp$ ls -R src
src/bar:

src/baz:
sitemap_gen.pl sitemap.xml ssl_error.png test1.png test2.png

src/foo:

src/quux:
blarg.png bookmarks_3_1_12.html cap1_inside.pcap cap3.pcap
config.xml example_urllist.txt fg.png test

src/quux/test:
README
```
Now for the options:

  -av: The -a option turns on rsync's archive mode, basically making
an  exact  copy  of  what it  finds,  recursively,  even  preserving
timestamps (equivalent  to -rlptgoD if  you want  to read up  on the
rsync options).  As you  might guess, -v  means 'verbose',  and will
cause rsync  to print each file  or directory it copies,  along with
any errors and a summary of how many bytes were transferred.

  -n:  This is  the dry-run  option. Combined  with -v,  this causes
rsync to display what it would do had you not used -n.

 --include='*/': Matches and includes all directories.

 --exclude='*': Matches and excludes everything

The order of the include and exclude options is important, since for
any given file path, the first  matching pattern is used. That means
that  if you  put the  include after  the exclude,  nothing will  be
matched  by  the  include  (in  this  case  resulting  in  an  empty
copy). Also be aware that the trailing slash on the src/ argument is
necessary. If  we omit it, the  src directory itself is  copied into
dst,  rather than  the  contents  of src.  An  important but  subtle
distinction. Now here is our dry-run:

```
thinknix@ser:~/tmp$ rsync -av -n --include='*/' --exclude='*' src/ dst
sending incremental file list
created directory dst
./
bar/
baz/
foo/
quux/
quux/test/

sent 152 bytes  received 35 bytes  374.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)
```

We can see that rsync is  just copying directories, and it's safe to
run the command without the -n:

```
thinknix@ser:~/tmp$ rsync -av --include='*/' --exclude='*' src/ dst
sending incremental file list
created directory dst
./
bar/
baz/
foo/
quux/
quux/test/

sent 152 bytes  received 35 bytes  374.00 bytes/sec
total size is 0 speedup is 0.00

thinknix@ser:~/tmp$ ls -R dst
dst:
bar  baz  foo  quux

dst/bar:

dst/baz:

dst/foo:

dst/quux:
test

dst/quux/test:
```
There we  have it -  we successfully copied the  directory structure
from src/ into dst/, without copying  any files. Rsync is an amazing
tool and I'll have more to say on it in the future.
Response: text/plain
Original URLgopher://gopher.unixlore.net/0/articles/copying-only-dire...
Content-Typetext/plain; charset=utf-8