I maintain a directory structure containing dirs and files that I regularly push to ~50 hosts, which are divided into 3 groups that have slightly different needs - minor mods in a couple of files.
So ideally I would have 4 directories:
/path/to/sync/common/ <- common files
/path/to/sync/group1/ <- group1 specific only
/path/to/sync/group2/ <- group2 specific only
/path/to/sync/group3/ <- group3 specific only
Then I'd run an rsync like
rsync -av --overlay /path/to/sync/groupN /path/to/sync/common remotehost:
Thinking in terms of a list of files to be transferred, I would like:
- anything present in common/ added to the file list; then
- anything present in groupN/ added to the list, clobbering anything already there
I realise I could populate the list myself and use --files-from=<LIST>
but I would rather have rsync work it out if possible. I can't think of a simple way to populate the list myself that isn't clunky (second prize for pointing one out!)
overlayfs
has been in the Linux kernel since v3.18. You could mount an overlayfs that provides a merged view on multiple directories like this:mount overlay /mnt/foo -t overlay -o lower=/path/to/group1:/path/to/common
(double-check the syntax and read the relevant part of the kernel docs directory; I'm typing this from memory)