X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/faa82484a5226534e9cf07880fc3a0874f9e9db5..448797a1e6b0abb1867faec4cf83c021c34b8bda:/rsync.yo diff --git a/rsync.yo b/rsync.yo index f54fd52d..8aacc1e1 100644 --- a/rsync.yo +++ b/rsync.yo @@ -785,9 +785,22 @@ files listed in the CVSIGNORE environment variable (all cvsignore names are delimited by whitespace). Finally, any file is ignored if it is in the same directory as a -.cvsignore file and matches one of the patterns listed therein. +.cvsignore file and matches one of the patterns listed therein. Unlike +rsync's filter/exclude files, these patterns are split on whitespace. See the bf(cvs(1)) manual for more information. +If you're combining bf(-C) with your own bf(--filter) rules, you should +note that these CVS excludes are appended at the end of your own rules, +regardless of where the -C was placed on the command-line. This makes them +a lower priority than any rules you specified explicitly. If you want to +control where these CVS excludes get inserted into your filter rules, you +should omit the bf(-C) as a command-line option and use a combination of +bf(--filter=:C) and bf(--filter=-C) (either on your command-line or by +putting the ":C" and "-C" rules into a filter file with your other rules). +The first option turns on the per-directory scanning for the .cvsignore +file. The second option does a one-time import of the CVS excludes +mentioned above. + dit(bf(-f, --filter=RULE)) This option allows you to add rules to selectively exclude certain files from the list of files to be transferred. This is most useful in combination with a recursive transfer. @@ -1215,12 +1228,12 @@ Rsync builds an ordered list of filter rules as specified on the command-line. Filter rules have the following syntax: quote( -tt(x [RULE])nl() -tt(xMODIFIERS [RULE])nl() +tt(x [PATTERN_OR_FILE])nl() +tt(xMODIFIERS [PATTERN_OR_FILE])nl() ) The 'x' is a single-letter that specifies the kind of rule to create. It -can have trailing modifiers, and is separated from the RULE by either a +can have trailing modifiers, and is separated from its arg by either a single space or an underscore (_). Here are the available rule prefixes: quote( @@ -1228,7 +1241,7 @@ bf(-) specifies an exclude pattern. nl() bf(+) specifies an include pattern. nl() bf(.) specifies a merge-file to read for more rules. nl() bf(:) specifies a per-directory merge-file. nl() -bf(!) clears the current include/exclude list (takes no RULE) nl() +bf(!) clears the current include/exclude list (takes no arg) nl() ) Note that the bf(--include)/bf(--exclude) command-line options do not allow the @@ -1368,32 +1381,38 @@ tt(:n- .non-inherited-per-dir-excludes)nl() The following modifiers are accepted after a "." or ":": itemize( - it() A "-" specifies that the file should consist of only exclude + it() A bf(-) specifies that the file should consist of only exclude patterns, with no other rule-parsing except for the list-clearing token ("!"). - it() A "+" specifies that the file should consist of only include + it() A bf(+) specifies that the file should consist of only include patterns, with no other rule-parsing except for the list-clearing token ("!"). - it() A "C" is a shorthand for the modifiers "sn-", which makes the + it() A bf(C) is a shorthand for the modifiers bf(nw-), which makes the parsing compatible with the way CVS parses their exclude files. If no filename is specified, ".cvsignore" is assumed. - it() A "e" will exclude the merge-file from the transfer; e.g. + it() A bf(e) will exclude the merge-file from the transfer; e.g. ":e_.rules" is like ":_.rules" and "-_.rules". - it() An "n" specifies that the rules are not inherited by subdirectories. - it() An "s" specifies that the rules are split on all whitespace instead + it() An bf(n) specifies that the rules are not inherited by subdirectories. + it() A bf(w) specifies that the rules are word-split on whitespace instead of the normal line-splitting. This also turns off comments. Note: the space that separates the prefix from the rule is treated specially, so - "- foo + bar" is parsed as two rules (assuming that "-" or "+" was not + "- foo + bar" is parsed as two rules (assuming that bf(-) or bf(+) was not specified to turn off the parsing of prefixes). ) -The following modifier is accepted after a "+" or "-": +The following modifiers are accepted after a "+" or "-": itemize( it() A "/" specifies that the include/exclude should be treated as an absolute path, relative to the root of the filesystem. For example, "-/_/etc/passwd" would exclude the passwd file any time the transfer was sending files from the "/etc" directory. + it() A "!" specifies that the include/exclude should take effect if + the pattern fails to match. For instance, "-! */" would exclude all + non-directories. + it() A bf(C) is used to indicate that all the global CVS-exclude rules + should be inserted as excludes in place of the "-C". No arg should + follow. ) Per-directory rules are inherited in all subdirectories of the directory @@ -1457,7 +1476,7 @@ a part of the transfer. If you want to include the contents of a ".cvsignore" in your patterns, you should use the rule ":C" -- this is a short-hand for the rule -":sn-_.cvsignore", and ensures that the .cvsignore file's contents are +":nw-_.cvsignore", and ensures that the .cvsignore file's contents are interpreted according to the same parsing rules that CVS uses. You can use this to affect where the bf(--cvs-exclude) (bf(-C)) option's inclusion of the per-directory .cvsignore file gets placed into your rules by putting a @@ -1478,10 +1497,11 @@ tt(rsync -avC --include=foo.o -f :C --exclude='*.old' a/ b)nl() Both of the above rsync commands are identical. Each one will merge all the per-directory .cvsignore rules in the middle of the list rather than at the end. This allows their dir-specific rules to supersede the rules -that follow the :C instead of being subservient to all your rules. (The -global rules taken from the $HOME/.cvsignore file and from $CVSIGNORE are -not repositioned from their spot at the end of your rules, however -- feel -free to manually include $HOME/.cvsignore elsewhere in your rules.) +that follow the :C instead of being subservient to all your rules. To +affect the other CVS exclude rules (i.e. the default list of exclusions, +the contents of $HOME/.cvsignore, and the value of $CVSIGNORE) you should +omit the bf(-C) command-line option and instead insert a "-C" rule into +your filter rules; e.g. "--filter=-C". manpagesection(LIST-CLEARING FILTER RULE)