I want to get only new or changed file list with few filters on result. My all new or changed files are:
>f+++++++++ dsadcache.txt
>f+++++++++ root.svn
>f+++++++++ txt-file-in-root.txt
>fcsT...... wp-config.php
cd+++++++++ cache/
>f+++++++++ cache/fileincac.txt
>f+++++++++ cache/fileincache.txt
>f+++++++++ wp-content/inside.svn
>f+++++++++ wp-content/inside.txt
>f+++++++++ wp-content/object-cache.php
Final result should looks like:
>f+++++++++ txt-file-in-root.txt
>fcsT...... wp-config.php
>f+++++++++ wp-content/inside.txt
When i try to include-from file with this rules:
- *cache*
+ *.html
+ *.txt
+ *.js
+ *.php
+ *.jpg
+ *.jpeg
+ *.png
+ *.bmp
+ *.gif
+ *.tif
+ *.tiff
+ *.ico
+ *.json
+ *.xml
- *
filters work but the result is not recursive
>f+++++++++ txt-file-in-root.txt
>fcsT...... wp-config.php
missing:
>f+++++++++ wp-content/inside.txt
My command is:
rsync -nrci --include-from="file" source/ destination
EDIT:
Let me explain the winning answer:
Here is the order of paths rsync process:
dsadcache.txt
txt-file-in-root.txt
cache/
cache/fileincac.txt
cache/fileincache.txt
wp-content/
wp-content/inside.txt
wp-config.php
Without including
filter='+ */'
directories
cache/
wp-content/
are excluded.
In recursive mode rsync visits subdirectories from the top down, so wp-content
is matched against your rules first when rsync checks the top level of your tree. As there is no inclusion pattern that matches this directory, the generic exclusion rule - *
drops it.
According to rsync manpage, one way of achieving your goal is to place a + */
anywhere before the exclusion rule, so subdirectories are included during recursive operation.