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

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

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?!

Leave a Comment