How can I configure rsync to create target directory on remote server?

Viewed 210581

I would like to rsync from local computer to server. On a directory that does not exist, and I want rsync to create that directory on the server first.

How can I do that?

12 Answers

From the rsync manual page (man rsync):

--mkpath                 create the destination's path component
rsync source.pdf user1@192.168.56.100:~/not-created/target.pdf

If the target file is fully specified, the directory ~/not-created is not created.

rsync source.pdf user1@192.168.56.100:~/will-be-created/

But the target is specified with only a directory, the directory ~/will-be-created is created. / must be followed to let rsync know will-be-created is a directory.

use rsync twice~

1: tranfer a temp file, make sure remote relative directories has been created.

tempfile=/Users/temp/Dir0/Dir1/Dir2/temp.txt
# Dir0/Dir1/Dir2/ is directory that wanted.
rsync -aq /Users/temp/ rsync://remote

2: then you can specify the remote directory for transfer files/directory

tempfile|dir=/Users/XX/data|/Users/XX/data/
rsync -avc /Users/XX/data rsync://remote/Dir0/Dir1/Dir2
# Tips: [SRC] with/without '/' is different

This creates the dir tree /usr/local/bin in the destination and then syncs all containing files and folders recursively:

rsync --archive --include="/usr" --include="/usr/local" --include="/usr/local/bin" --include="/usr/local/bin/**" --exclude="*" user@remote:/ /home/user

Compared to mkdir -p, the dir tree even has the same perms as the source.

If you are using a version or rsync that doesn't have 'mkpath', then --files-from can help. Suppose you need to create 'mysubdir' in the target directory

Create 'filelist.txt' to contain mysubdir/dummy

mkdir -p source_dir/mysubdir/
touch source_dir/mysubdir/dummy
rsync --files-from='filelist.txt' source_dir target_dir

rsync will copy mysubdir/dummy to target_dir, creating mysubdir in the process. Tested with rsync 3.1.3 on Raspberry Pi OS (debian).

Related