Rsync synchronizing files only without creating folders on destination

rsync

Is it possible with rsync to not create directories on destination?

Imagine I have that source :

a/
a/x.txt
b/
b/y.txt

And that I have this destination :

a/
a/z.txt

The wanted result of rsync source destination :

a/
a/x.txt
a/z.txt

Of course my real situation involves thousand files/folders structure and I don't want solutions involving explicit list of synced folders, which I can do. I'm looking for a clean way just to prevent any folder creation on destination. By exclude or filtering… That could even be something outside rsync, like a hack with permissions if rsync can't do this…


For information, this is really easy to get this kind of situations, in my case I have:

  • A server with 2 disks, let's say A & B. And a local drive C.
  • I usually use rsync to sync (and merge) remote A & B into local C.
  • Then sometimes I just want to sync back some C files into A and B. (Just new Files… not non-existing folders on destination)

Best Answer

Try the following:

rsync -av src:/dir/to/files/* /dest/dir

If you have multiple nested subdirectories, you'll need to do something like this first:

find /dir/to/files -type d -print

Run that list of directories through a loop and call rsync each time. Of course, assuming you're doing this on a remote machine, you'll need to issue the find via ssh and store the results in an array and then execute the rsync loop.