mirror of
https://github.com/restic/restic.git
synced 2026-05-22 10:05:24 +00:00
filter: ability to use negative patterns
This is quite similar to gitignore. If a pattern is suffixed by an
exclamation mark and match a file that was previously matched by a
regular pattern, the match is cancelled. Notably, this can be used
with `--exclude-file` to cancel the exclusion of some files.
Like for gitignore, once a directory is excluded, it is not possible
to include files inside the directory. For example, a user wanting to
only keep `*.c` in some directory should not use:
~/work
!~/work/*.c
But:
~/work/*
!~/work/*.c
I didn't write documentation or changelog entry. I would like to get
feedback if this is the right approach for excluding/including files
at will for backups. I use something like this as an exclude file to
backup my home:
$HOME/**/*
!$HOME/Documents
!$HOME/code
!$HOME/.emacs.d
!$HOME/games
# [...]
node_modules
*~
*.o
*.lo
*.pyc
# [...]
$HOME/code/linux/*
!$HOME/code/linux/.git
# [...]
There are some limitations for this change:
- Patterns are not mixed accross methods: patterns from file are
handled first and if a file is excluded with this method, it's not
possible to reinclude it with `--exclude !something`.
- Patterns starting with `!` are now interpreted as a negative
pattern. I don't think anyone was relying on that.
- The whole list of patterns is walked for each match. We may
optimize later by exiting early if we know no pattern is starting
with `!`.
Fix #233
This commit is contained in:
committed by
Alexander Neumann
parent
12606b575f
commit
2ee07ded2b
@@ -289,6 +289,28 @@ On most Unixy shells, you can either quote or use backslashes. For example:
|
||||
* ``--exclude="foo bar star/foo.txt"``
|
||||
* ``--exclude=foo\ bar\ star/foo.txt``
|
||||
|
||||
If a pattern is suffixed by an exclamation mark and match a file that
|
||||
was previously matched by a regular pattern, the match is cancelled.
|
||||
It works similarly to ``gitignore``, with the same limitation: once a
|
||||
directory is excluded, it is not possible to include files inside the
|
||||
directory. Here is a complete example to backup a selection of
|
||||
directories inside the home directory. It works by excluding any
|
||||
directory, then selectively add back some of them.
|
||||
|
||||
::
|
||||
|
||||
$HOME/**/*
|
||||
!$HOME/Documents
|
||||
!$HOME/code
|
||||
!$HOME/.emacs.d
|
||||
!$HOME/games
|
||||
# [...]
|
||||
node_modules
|
||||
*~
|
||||
*.o
|
||||
*.lo
|
||||
*.pyc
|
||||
|
||||
By specifying the option ``--one-file-system`` you can instruct restic
|
||||
to only backup files from the file systems the initially specified files
|
||||
or directories reside on. In other words, it will prevent restic from crossing
|
||||
|
||||
Reference in New Issue
Block a user