Linux: rsync Copy Directories Structures Tree Only

Posted on in Categories , last updated January 16, 2011

I am looking for to only sync directories structures only. How do I copy directory structure tree without copying any files under Linux or UNIX operating system to remove server or local directory?

You need to use the rsync command. The rsync remote-update protocol allows rsync to transfer just

the differences between two sets of files across the network connection, using an efficient checksum-search algorithm. Make sure it is installed on all servers for remote copy. The syntax is as follows to copy directories tree only:

rsync -av -f"+ */" -f"- *" /path/to/src /path/to/dest/
rsync -av -f"+ */" -f"- *" /path/to/apache/logs/ root@www433.nixcraft.net.in:/path/to/apache/logs/

If you are using an older rsync version, try:

rsync -av --include='*/' --exclude='*' /path/to/src /path/to/dest/
rsync -av --include='*/' --exclude='*' /path/to/apache/logs/ root@www433.nixcraft.net.in:/path/to/apache/logs/

rsync Command For Directory Structures / Tree Only

Consider the following layout in /var/logs/apache/ for each domain:

cricketnow.in/
cyberciti.biz/
hexindia.net/
io9.in/
nixcraft.com/
theos.in/

You can sync just directories by excluding everything else. Open a command-line terminal (select Applications > Accessories > Terminal), and then type the following commands or login using ssh to the remote server. You want to copy all dirs i.e. exclude everything that is not a directory, enter:
# cd /var/log/apache/
# rsync -av -f"+ */" -f"- *" . [email protected]:/var/log/apache/

Sample outputs:

building file list ... done
./
cricketnow.in/
cyberciti.biz/
hexindia.net/
io9.in/
nixcraft.com/
theos.in/

sent 388 bytes  received 98 bytes  972.00 bytes/sec
total size is 0  speedup is 0.00

You can also make local copies as follows:
# cd /var/log/apache/
# rsync -av -f"+ */" -f"- *" . /jailfs/apache/httpd_root/var/log/apache/

See also:

If you need assistance with Linux / UNIX rsync command-line options, turn to the man page first. It will give you detailed information, parameters and switches for rsync command:
$ man rsync

8 comment

  1. You can use a find command for this if you want the whole directory tree, not just the top level. Of course when pushing a structure remotely its better to manipulate locally then push:

    find -type d -exec mkdir -p /{} \;

    This will copy the directory structure of to under the dir.

    Isn’t the find command wonderful?!

  2. Thank you so much for this, it was exactly what we needed and worked so much faster than what we were trying to do before your solution !

Leave a Comment