I have the configuration file like this in sections
[rsync_includes]
user
data
conf
[rsync_exclude]
tmp
.pyc
*/vendor
[javascript]
utils
data
I have the patterns which i want to exlude in rsync and other configuration data in that file
Now i am confused how can i use those patterns on command line
rsync -avz --exclude-from 'content from config file rsync exclude' source/ destination/
I am not sure how can read part of config file and then use on command line
To use
--exclude-from
you will have to isolate the relevant section of the config into a temporary file. This is easy to do with a bit of sed:I am omitting error checking and cleanup for clarity.
Note that rsync can read the exclude pattern from the stdin for an
-
input, so this is even shorter:Explanation
1,/rsync_exclude/d
excludes all lines up to the rsync_exclude section entry/\[/,$d
excludes everything from the start of the next section to the end of the file/^$/d
excludes empty lines (this is optional)All of the above extracts the relevant section from the config.
If your configuration file is in
config.ini
, then run a bash script:After that runs, it creates rsync-filter which contains both the include and exclude rules and can be used with rsync as:
Separately,
rsync
offers the-F
option which is equivalent to--filter='dir-merge /.rsync-filter'
. This loads include/exclude rules from the file/source/.rsync-filter
and, further, asrsync
goes deeper into the directory tree, it will look for and load rules from.rsync-filter
files that it finds and apply those rules to files in that directory and its subdirectories. This is a powerful way to keep and organize rsync rules.Also, the order in which rsync reads include and exclude rules is important. With these filter files, you retain control over that order. That is an important advantage when you are trying to get rsync rules to work right.
I will admit that I'm not familiar with rsync, but I would format that data differently, myself.
From there, you can do the following:-
This way you can customise your command line depending on which group the parameter belongs to; so with parameters from the javascript group, you can log the operations to a different file, for instance.