2015-09-27 17:13:20 +02:00
---
2021-01-21 15:47:35 +01:00
title: "Rclone Filtering"
description: "Rclone filtering, includes and excludes"
2022-11-17 18:56:24 +01:00
versionIntroduced: "v1.22"
2015-09-27 17:13:20 +02:00
---
2021-01-21 15:47:35 +01:00
# Filtering, includes and excludes
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Filter flags determine which files rclone `sync` , `move` , `ls` , `lsl` ,
`md5sum` , `sha1sum` , `size` , `delete` , `check` and similar commands
apply to.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
They are specified in terms of path/file name patterns; path/file
lists; file age and size, or presence of a file in a directory. Bucket
based remotes without the concept of directory apply filters to object
key, age and size in an analogous way.
2015-11-24 17:54:12 +01:00
2021-01-21 15:47:35 +01:00
Rclone `purge` does not obey filters.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
To test filters without risk of damage to data, apply them to `rclone
ls`, or with the `--dry-run` and `-vv` flags.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Rclone filter patterns can only be used in filter command line options, not
in the specification of a remote.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. `rclone copy "remote:dir*.jpg" /path/to/dir` does not have a filter effect.
`rclone copy remote:dir /path/to/dir --include "*.jpg"` does.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
**Important** Avoid mixing any two of `--include...` , `--exclude...` or
2023-08-29 16:10:50 +02:00
`--filter...` flags in an rclone command. The results might not be what
2021-01-21 15:47:35 +01:00
you expect. Instead use a `--filter...` flag.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
## Patterns for matching path/file names
2016-03-19 18:40:54 +01:00
2022-08-04 19:19:05 +02:00
### Pattern syntax {#patterns}
2015-09-27 17:13:20 +02:00
2021-10-09 13:56:23 +02:00
Here is a formal definition of the pattern syntax,
[examples ](#examples ) are below.
2021-01-21 15:47:35 +01:00
Rclone matching rules follow a glob style:
2015-09-27 17:13:20 +02:00
2021-06-08 11:26:06 +02:00
* matches any sequence of non-separator (/) characters
** matches any sequence of characters including / separators
? matches any single non-separator (/) character
[ [ ! ] { character-range } ]
character class (must be non-empty)
{ pattern-list }
pattern alternatives
2021-10-09 13:56:23 +02:00
{{ regexp }}
regular expression to match
2021-06-08 11:26:06 +02:00
c matches character c (c != *, * *, ?, \, [, {, })
2021-10-09 13:56:23 +02:00
\c matches reserved character c (c = *, * *, ?, \, [, {, }) or character class
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
character-range:
2015-09-27 17:13:20 +02:00
2021-06-08 11:26:06 +02:00
c matches character c (c != \, -, ])
\c matches reserved character c (c = \, -, ])
lo - hi matches character c for lo < = c < = hi
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
pattern-list:
2015-09-27 17:13:20 +02:00
2021-06-08 11:26:06 +02:00
pattern { , pattern }
comma-separated (without spaces) patterns
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
character classes (see [Go regular expression reference ](https://golang.org/pkg/regexp/syntax/ )) include:
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Named character classes (e.g. [\d], [^\d], [\D], [^\D])
Perl character classes (e.g. \s, \S, \w, \W)
ASCII character classes (e.g. [[:alnum:]], [[:alpha:]], [[:punct:]], [[:xdigit:]])
2015-09-27 17:13:20 +02:00
2021-10-09 13:56:23 +02:00
regexp for advanced users to insert a regular expression - see [below ](#regexp ) for more info:
Any re2 regular expression not containing `}}`
2021-01-21 15:47:35 +01:00
If the filter pattern starts with a `/` then it only matches
at the top level of the directory tree,
**relative to the root of the remote** (not necessarily the root
of the drive). If it does not start with `/` then it is matched
starting at the **end of the path/file name** but it only matches
a complete path element - it must match from a `/`
separator or the beginning of the path/file.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
file.jpg - matches "file.jpg"
- matches "directory/file.jpg"
- doesn't match "afile.jpg"
- doesn't match "directory/afile.jpg"
/file.jpg - matches "file.jpg" in the root directory of the remote
- doesn't match "afile.jpg"
- doesn't match "directory/file.jpg"
2015-09-27 17:13:20 +02:00
2023-08-29 16:10:50 +02:00
The top level of the remote might not be the top level of the drive.
2021-02-10 19:09:48 +01:00
E.g. for a Microsoft Windows local directory structure
F:
├── bkp
├── data
│ ├── excl
│ │ ├── 123.jpg
│ │ └── 456.jpg
│ ├── incl
│ │ └── document.pdf
To copy the contents of folder `data` into folder `bkp` excluding the contents of subfolder
`excl` the following command treats `F:\data` and `F:\bkp` as top level for filtering.
`rclone copy F:\data\ F:\bkp\ --exclude=/excl/**`
2021-01-21 15:47:35 +01:00
**Important** Use `/` in path/file name patterns and not `\` even if
running on Microsoft Windows.
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
Simple patterns are case sensitive unless the `--ignore-case` flag is used.
2018-11-12 15:29:37 +01:00
Without `--ignore-case` (default)
potato - matches "potato"
- doesn't match "POTATO"
With `--ignore-case`
potato - matches "potato"
- matches "POTATO"
2021-10-09 13:56:23 +02:00
## Using regular expressions in filter patterns {#regexp}
The syntax of filter patterns is glob style matching (like `bash`
uses) to make things easy for users. However this does not provide
absolute control over the matching, so for advanced users rclone also
provides a regular expression syntax.
The regular expressions used are as defined in the [Go regular
expression reference](https://golang.org/pkg/regexp/syntax/). Regular
expressions should be enclosed in `{{` `}}` . They will match only the
last path segment if the glob doesn't start with `/` or the whole path
2022-06-07 16:05:24 +02:00
name if it does. Note that rclone does not attempt to parse the
supplied regular expression, meaning that using any regular expression
filter will prevent rclone from using [directory filter rules ](#directory_filter ),
as it will instead check every path against
the supplied regular expression(s).
2021-10-09 13:56:23 +02:00
Here is how the `{{regexp}}` is transformed into an full regular
expression to match the entire path:
{{regexp}} becomes (^|/)(regexp)$
/{{regexp}} becomes ^(regexp)$
Regexp syntax can be mixed with glob syntax, for example
*.{{jpe?g}} to match file.jpg, file.jpeg but not file.png
You can also use regexp flags - to set case insensitive, for example
*.{{(?i)jpg}} to match file.jpg, file.JPG but not file.png
Be careful with wildcards in regular expressions - you don't want them
to match path separators normally. To match any file name starting
with `start` and ending with `end` write
{{start[^/]*end\.jpg}}
Not
{{start.*end\.jpg}}
Which will match a directory called `start` with a file called
`end.jpg` in it as the `.*` will match `/` characters.
Note that you can use `-vv --dump filters` to show the filter patterns
2023-03-24 14:31:39 +01:00
in regexp format - rclone implements the glob patterns by transforming
2021-10-09 13:56:23 +02:00
them into regular expressions.
## Filter pattern examples {#examples}
| Description | Pattern | Matches | Does not match |
| ----------- |-------- | ------- | -------------- |
| Wildcard | `*.jpg` | `/file.jpg` | `/file.png` |
| | | `/dir/file.jpg` | `/dir/file.png` |
| Rooted | `/*.jpg` | `/file.jpg` | `/file.png` |
| | | `/file2.jpg` | `/dir/file.jpg` |
| Alternates | `*.{jpg,png}` | `/file.jpg` | `/file.gif` |
2022-08-18 21:14:26 +02:00
| | | `/dir/file.png` | `/dir/file.gif` |
2021-10-09 13:56:23 +02:00
| Path Wildcard | `dir/**` | `/dir/anyfile` | `file.png` |
| | | `/subdir/dir/subsubdir/anyfile` | `/subdir/file.png` |
| Any Char | `*.t?t` | `/file.txt` | `/file.qxt` |
| | | `/dir/file.tzt` | `/dir/file.png` |
| Range | `*.[a-z]` | `/file.a` | `/file.0` |
| | | `/dir/file.b` | `/dir/file.1` |
| Escape | `*.\?\?\?` | `/file.???` | `/file.abc` |
| | | `/dir/file.???` | `/dir/file.def` |
| Class | `*.\d\d\d` | `/file.012` | `/file.abc` |
| | | `/dir/file.345` | `/dir/file.def` |
| Regexp | `*.{{jpe?g}}` | `/file.jpeg` | `/file.png` |
| | | `/dir/file.jpg` | `/dir/file.jpeeg` |
| Rooted Regexp | `/{{.*\.jpe?g}}` | `/file.jpeg` | `/file.png` |
| | | `/file.jpg` | `/dir/file.jpg` |
2022-08-04 19:19:05 +02:00
## How filter rules are applied to files {#how-filter-rules-work}
2016-05-19 13:39:16 +02:00
2021-02-18 12:11:56 +01:00
Rclone path/file name filters are made up of one or more of the following flags:
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
* `--include`
* `--include-from`
* `--exclude`
* `--exclude-from`
* `--filter`
* `--filter-from`
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
There can be more than one instance of individual flags.
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
Rclone internally uses a combined list of all the include and exclude
rules. The order in which rules are processed can influence the result
of the filter.
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
All flags of the same type are processed together in the order
above, regardless of what order the different types of flags are
included on the command line.
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
Multiple instances of the same flag are processed from left
to right according to their position in the command line.
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
To mix up the order of processing includes and excludes use `--filter...`
flags.
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
Within `--include-from` , `--exclude-from` and `--filter-from` flags
2021-02-10 19:21:41 +01:00
rules are processed from top to bottom of the referenced file.
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
If there is an `--include` or `--include-from` flag specified, rclone
implies a `- **` rule which it adds to the bottom of the internal rule
list. Specifying a `+` rule with a `--filter...` flag does not imply
that rule.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Each path/file name passed through rclone is matched against the
combined filter list. At first match to a rule the path/file name
is included or excluded and no further filter rules are processed for
that path/file.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
If rclone does not find a match, after testing against all rules
(including the implied rule if appropriate), the path/file name
is included.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Any path/file included at that stage is processed by the rclone
command.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
`--files-from` and `--files-from-raw` flags over-ride and cannot be
combined with other filter options.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
To see the internal combined rule list, in regular expression form,
for a command add the `--dump filters` flag. Running an rclone command
with `--dump filters` and `-vv` flags lists the internal filter elements
and shows how they are applied to each source path/file. There is not
currently a means provided to pass regular expression filter options into
rclone directly though character class filter rules contain character
classes. [Go regular expression reference ](https://golang.org/pkg/regexp/syntax/ )
2015-09-27 17:13:20 +02:00
2022-06-07 16:05:24 +02:00
### How filter rules are applied to directories {#directory_filter}
2015-09-27 17:13:20 +02:00
2021-02-18 12:11:56 +01:00
Rclone commands are applied to path/file names not
2021-01-21 15:47:35 +01:00
directories. The entire contents of a directory can be matched
to a filter by the pattern `directory/*` or recursively by
`directory/**` .
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Directory filter rules are defined with a closing `/` separator.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. `/directory/subdirectory/` is an rclone directory filter rule.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Rclone commands can use directory filter rules to determine whether they
recurse into subdirectories. This potentially optimises access to a remote
by avoiding listing unnecessary directories. Whether optimisation is
desirable depends on the specific filter rules and source remote content.
2015-09-27 17:13:20 +02:00
2022-06-07 16:05:24 +02:00
If any [regular expression filters ](#regexp ) are in use, then no
directory recursion optimisation is possible, as rclone must check
every path against the supplied regular expression(s).
2021-02-18 12:11:56 +01:00
Directory recursion optimisation occurs if either:
2015-09-27 17:13:20 +02:00
2021-02-10 19:21:41 +01:00
* A source remote does not support the rclone `ListR` primitive. local,
2022-06-19 18:59:54 +02:00
sftp, Microsoft OneDrive and WebDAV do not support `ListR` . Google
2021-01-21 15:47:35 +01:00
Drive and most bucket type storage do. [Full list ](https://rclone.org/overview/#optional-features )
2015-09-27 17:13:20 +02:00
2021-02-18 12:11:56 +01:00
* On other remotes (those that support `ListR` ), if the rclone command is not naturally recursive, and
2021-01-21 15:47:35 +01:00
provided it is not run with the `--fast-list` flag. `ls` , `lsf -R` and
2021-02-10 19:21:41 +01:00
`size` are naturally recursive but `sync` , `copy` and `move` are not.
2016-05-16 18:14:04 +02:00
2021-01-21 15:47:35 +01:00
* Whenever the `--disable ListR` flag is applied to an rclone command.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Rclone commands imply directory filter rules from path/file filter
rules. To view the directory filter rules rclone has implied for a
command specify the `--dump filters` flag.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. for an include rule
2016-12-07 14:37:40 +01:00
2021-01-21 15:47:35 +01:00
/a/*.jpg
2016-12-07 14:37:40 +01:00
2021-01-21 15:47:35 +01:00
Rclone implies the directory include rule
/a/
2016-12-07 14:37:40 +01:00
2021-01-21 15:47:35 +01:00
Directory filter rules specified in an rclone command can limit
the scope of an rclone command but path/file filters still have
to be specified.
2017-11-20 23:33:54 +01:00
2021-01-21 15:47:35 +01:00
E.g. `rclone ls remote: --include /directory/` will not match any
files. Because it is an `--include` option the `--exclude **` rule
2021-02-10 19:21:41 +01:00
is implied, and the `/directory/` pattern serves only to optimise
2021-01-21 15:47:35 +01:00
access to the remote by ignoring everything outside of that directory.
2016-12-07 14:37:40 +01:00
2021-01-21 15:47:35 +01:00
E.g. `rclone ls remote: --filter-from filter-list.txt` with a file
`filter-list.txt` :
2016-12-07 14:37:40 +01:00
2021-01-21 15:47:35 +01:00
- /dir1/
- /dir2/
+ *.pdf
- **
2016-12-07 14:37:40 +01:00
2021-01-21 15:47:35 +01:00
All files in directories `dir1` or `dir2` or their subdirectories
are completely excluded from the listing. Only files of suffix
2021-02-10 19:21:41 +01:00
`pdf` in the root of `remote:` or its subdirectories are listed.
2021-01-21 15:47:35 +01:00
The `- **` rule prevents listing of any path/files not previously
matched by the rules above.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Option `exclude-if-present` creates a directory exclude rule based
on the presence of a file in a directory and takes precedence over
other rclone directory filter rules.
2015-09-27 17:13:20 +02:00
2021-03-17 14:34:46 +01:00
When using pattern list syntax, if a pattern item contains either
`/` or `**` , then rclone will not able to imply a directory filter rule
from this pattern list.
E.g. for an include rule
{dir1/**,dir2/**}
Rclone will match files below directories `dir1` or `dir2` only,
but will not be able to use this filter to exclude a directory `dir3`
from being traversed.
Directory recursion optimisation may affect performance, but normally
not the result. One exception to this is sync operations with option
`--create-empty-src-dirs` , where any traversed empty directories will
be created. With the pattern list example `{dir1/**,dir2/**}` above,
this would create an empty directory `dir3` on destination (when it exists
on source). Changing the filter to `{dir1,dir2}/**` , or splitting it into
two include rules `--include dir1/** --include dir2/**` , will match the
same files while also filtering directories, with the result that an empty
directory `dir3` will no longer be created.
2021-01-21 15:47:35 +01:00
### `--exclude` - Exclude files matching pattern
Excludes path/file names from an rclone command based on a single exclude
rule.
This flag can be repeated. See above for the order filter flags are
2016-12-07 14:37:40 +01:00
processed in.
2021-01-21 15:47:35 +01:00
`--exclude` should not be used with `--include` , `--include-from` ,
`--filter` or `--filter-from` flags.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
`--exclude` has no effect when combined with `--files-from` or
`--files-from-raw` flags.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. `rclone ls remote: --exclude *.bak` excludes all .bak files
from listing.
2015-09-27 17:13:20 +02:00
2024-04-09 12:16:59 +02:00
E.g. `rclone size remote: --exclude "/dir/**"` returns the total size of
2021-01-21 15:47:35 +01:00
all files on `remote:` excluding those in root directory `dir` and sub
directories.
E.g. on Microsoft Windows `rclone ls remote: --exclude "*\[{JP,KR,HK}\]*"`
2023-06-30 15:28:38 +02:00
lists the files in `remote:` without `[JP]` or `[KR]` or `[HK]` in
2021-02-10 19:21:41 +01:00
their name. Quotes prevent the shell from interpreting the `\`
characters.`\` characters escape the `[` and `]` so an rclone filter
2021-01-21 15:47:35 +01:00
treats them literally rather than as a character-range. The `{` and `}`
define an rclone pattern list. For other operating systems single quotes are
required ie `rclone ls remote: --exclude '*\[{JP,KR,HK}\]*'`
### `--exclude-from` - Read exclude patterns from file
2016-12-07 14:37:40 +01:00
2021-01-21 15:47:35 +01:00
Excludes path/file names from an rclone command based on rules in a
named file. The file contains a list of remarks and pattern rules.
For an example `exclude-file.txt` :
2015-09-27 17:13:20 +02:00
# a sample exclude rule file
*.bak
file2.jpg
2021-01-21 15:47:35 +01:00
`rclone ls remote: --exclude-from exclude-file.txt` lists the files on
`remote:` except those named `file2.jpg` or with a suffix `.bak` . That is
equivalent to `rclone ls remote: --exclude file2.jpg --exclude "*.bak"` .
This flag can be repeated. See above for the order filter flags are
processed in.
The `--exclude-from` flag is useful where multiple exclude filter rules
are applied to an rclone command.
`--exclude-from` should not be used with `--include` , `--include-from` ,
`--filter` or `--filter-from` flags.
`--exclude-from` has no effect when combined with `--files-from` or
`--files-from-raw` flags.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
`--exclude-from` followed by `-` reads filter rules from standard input.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
### `--include` - Include files matching pattern
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Adds a single include rule based on path/file names to an rclone
command.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
This flag can be repeated. See above for the order filter flags are
2016-12-07 14:37:40 +01:00
processed in.
2021-01-21 15:47:35 +01:00
`--include` has no effect when combined with `--files-from` or
`--files-from-raw` flags.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
`--include` implies `--exclude **` at the end of an rclone internal
filter list. Therefore if you mix `--include` and `--include-from`
flags with `--exclude` , `--exclude-from` , `--filter` or `--filter-from` ,
you must use include rules for all the files you want in the include
statement. For more flexibility use the `--filter-from` flag.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. `rclone ls remote: --include "*.{png,jpg}"` lists the files on
`remote:` with suffix `.png` and `.jpg` . All other files are excluded.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. multiple rclone copy commands can be combined with `--include` and a
pattern-list.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
rclone copy /vol1/A remote:A
rclone copy /vol1/B remote:B
is equivalent to:
rclone copy /vol1 remote: --include "{A,B}/**"
E.g. `rclone ls remote:/wheat --include "??[^[:punct:]]*"` lists the
files `remote:` directory `wheat` (and subdirectories) whose third
character is not punctuation. This example uses
an [ASCII character class ](https://golang.org/pkg/regexp/syntax/ ).
### `--include-from` - Read include patterns from file
Adds path/file names to an rclone command based on rules in a
named file. The file contains a list of remarks and pattern rules.
2016-12-07 14:37:40 +01:00
2021-01-21 15:47:35 +01:00
For an example `include-file.txt` :
2015-09-27 17:13:20 +02:00
# a sample include rule file
*.jpg
file2.avi
2021-01-21 15:47:35 +01:00
`rclone ls remote: --include-from include-file.txt` lists the files on
`remote:` with name `file2.avi` or suffix `.jpg` . That is equivalent to
`rclone ls remote: --include file2.avi --include "*.jpg"` .
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
This flag can be repeated. See above for the order filter flags are
processed in.
The `--include-from` flag is useful where multiple include filter rules
are applied to an rclone command.
`--include-from` implies `--exclude **` at the end of an rclone internal
filter list. Therefore if you mix `--include` and `--include-from`
flags with `--exclude` , `--exclude-from` , `--filter` or `--filter-from` ,
you must use include rules for all the files you want in the include
statement. For more flexibility use the `--filter-from` flag.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
`--exclude-from` has no effect when combined with `--files-from` or
`--files-from-raw` flags.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
`--exclude-from` followed by `-` reads filter rules from standard input.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
### `--filter` - Add a file-filtering rule
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Specifies path/file names to an rclone command, based on a single
2021-11-04 12:50:43 +01:00
include or exclude rule, in `+` or `-` format.
2021-01-21 15:47:35 +01:00
This flag can be repeated. See above for the order filter flags are
2016-12-07 14:37:40 +01:00
processed in.
2021-01-21 15:47:35 +01:00
`--filter +` differs from `--include` . In the case of `--include` rclone
implies an `--exclude *` rule which it adds to the bottom of the internal rule
list. `--filter...+` does not imply
that rule.
`--filter` has no effect when combined with `--files-from` or
`--files-from-raw` flags.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
`--filter` should not be used with `--include` , `--include-from` ,
`--exclude` or `--exclude-from` flags.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. `rclone ls remote: --filter "- *.bak"` excludes all `.bak` files
from a list of `remote:` .
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
### `--filter-from` - Read filtering patterns from a file
Adds path/file names to an rclone command based on rules in a
named file. The file contains a list of remarks and pattern rules. Include
rules start with `+ ` and exclude rules with `- ` . `!` clears existing
rules. Rules are processed in the order they are defined.
This flag can be repeated. See above for the order filter flags are
2016-12-07 14:37:40 +01:00
processed in.
2021-01-21 15:47:35 +01:00
Arrange the order of filter rules with the most restrictive first and
work down.
2024-10-21 09:10:09 +02:00
Lines starting with # or ; are ignored, and can be used to write comments. Inline comments are not supported. _Use `-vv --dump filters` to see how they appear in the final regexp._
2021-03-17 14:34:46 +01:00
E.g. for `filter-file.txt` :
2015-09-27 17:13:20 +02:00
2017-09-01 12:35:26 +02:00
# a sample filter rule file
2015-09-27 17:13:20 +02:00
- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
2024-10-21 09:10:09 +02:00
- /dir/tmp/** # WARNING! This text will be treated as part of the path.
2017-09-01 12:35:26 +02:00
- /dir/Trash/**
+ /dir/**
2015-09-27 17:13:20 +02:00
# exclude everything else
- *
2021-01-21 15:47:35 +01:00
`rclone ls remote: --filter-from filter-file.txt` lists the path/files on
`remote:` including all `jpg` and `png` files, excluding any
matching `secret*.jpg` and including `file2.avi` . It also includes
everything in the directory `dir` at the root of `remote` , except
`remote:dir/Trash` which it excludes. Everything else is excluded.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. for an alternative `filter-file.txt` :
- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- *
Files `file1.jpg` , `file3.png` and `file2.avi` are listed whilst
2024-01-18 10:48:34 +01:00
`secret17.jpg` and files without the suffix `.jpg` or `.png` are excluded.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. for an alternative `filter-file.txt` :
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
+ *.jpg
+ *.gif
!
+ 42.doc
- *
2019-10-28 23:42:49 +01:00
2021-01-21 15:47:35 +01:00
Only file 42.doc is listed. Prior rules are cleared by the `!` .
2019-02-13 18:14:51 +01:00
2021-01-21 15:47:35 +01:00
### `--files-from` - Read list of source-file names
2018-10-19 18:41:14 +02:00
2021-01-21 15:47:35 +01:00
Adds path/files to an rclone command from a list in a named file.
Rclone processes the path/file names in the order of the list, and
no others.
2016-12-07 14:37:40 +01:00
2021-01-21 15:47:35 +01:00
Other filter flags (`--include`, `--include-from` , `--exclude` ,
`--exclude-from` , `--filter` and `--filter-from` ) are ignored when
`--files-from` is used.
2018-03-01 10:59:50 +01:00
2021-01-21 15:47:35 +01:00
`--files-from` expects a list of files as its input. Leading or
trailing whitespace is stripped from the input lines. Lines starting
with `#` or `;` are ignored.
Rclone commands with a `--files-from` flag traverse the remote,
treating the names in `--files-from` as a set of filters.
If the `--no-traverse` and `--files-from` flags are used together
an rclone command does not traverse the remote. Instead it addresses
each path/file named in the file individually. For each path/file name, that
requires typically 1 API call. This can be efficient for a short `--files-from`
list and a remote containing many files.
Rclone commands do not error if any names in the `--files-from` file are
missing from the source remote.
The `--files-from` flag can be repeated in a single rclone command to
read path/file names from more than one file. The files are read from left
to right along the command line.
Paths within the `--files-from` file are interpreted as starting
with the root specified in the rclone command. Leading `/` separators are
ignored. See [--files-from-raw ](#files-from-raw-read-list-of-source-file-names-without-any-processing ) if
you need the input to be processed in a raw manner.
E.g. for a file `files-from.txt` :
2015-09-27 17:13:20 +02:00
# comment
file1.jpg
2018-03-01 10:59:50 +01:00
subdir/file2.jpg
2021-01-21 15:47:35 +01:00
`rclone copy --files-from files-from.txt /home/me/pics remote:pics`
copies the following, if they exist, and only those files.
2015-09-27 17:13:20 +02:00
2018-03-01 10:59:50 +01:00
/home/me/pics/file1.jpg → remote:pics/file1.jpg
2019-07-27 13:35:54 +02:00
/home/me/pics/subdir/file2.jpg → remote:pics/subdir/file2.jpg
2018-03-01 10:59:50 +01:00
2021-01-21 15:47:35 +01:00
E.g. to copy the following files referenced by their absolute paths:
2016-07-05 13:33:59 +02:00
2021-01-21 15:47:35 +01:00
/home/user1/42
/home/user1/dir/ford
/home/user2/prefect
2016-07-05 13:33:59 +02:00
2021-01-21 15:47:35 +01:00
First find a common subdirectory - in this case `/home`
2016-07-05 13:33:59 +02:00
and put the remaining files in `files-from.txt` with or without
2020-10-13 23:49:58 +02:00
leading `/` , e.g.
2016-07-05 13:33:59 +02:00
2021-01-21 15:47:35 +01:00
user1/42
user1/dir/ford
user2/prefect
2016-07-05 13:33:59 +02:00
2021-01-21 15:47:35 +01:00
Then copy these to a remote:
2016-07-05 13:33:59 +02:00
rclone copy --files-from files-from.txt /home remote:backup
2021-01-21 15:47:35 +01:00
The three files are transferred as follows:
2018-03-01 10:59:50 +01:00
2021-01-21 15:47:35 +01:00
/home/user1/42 → remote:backup/user1/important
/home/user1/dir/ford → remote:backup/user1/dir/file
/home/user2/prefect → remote:backup/user2/stuff
2016-07-05 13:33:59 +02:00
2021-02-10 19:21:41 +01:00
Alternatively if `/` is chosen as root `files-from.txt` will be:
2016-07-05 13:33:59 +02:00
2021-01-21 15:47:35 +01:00
/home/user1/42
/home/user1/dir/ford
/home/user2/prefect
2016-07-05 13:33:59 +02:00
2021-02-10 19:21:41 +01:00
The copy command will be:
2016-07-05 13:33:59 +02:00
rclone copy --files-from files-from.txt / remote:backup
2021-01-21 15:47:35 +01:00
Then there will be an extra `home` directory on the remote:
/home/user1/42 → remote:backup/home/user1/42
/home/user1/dir/ford → remote:backup/home/user1/dir/ford
/home/user2/prefect → remote:backup/home/user2/prefect
### `--files-from-raw` - Read list of source-file names without any processing
This flag is the same as `--files-from` except that input is read in a
raw manner. Lines with leading / trailing whitespace, and lines starting
with `;` or `#` are read without any processing. [rclone lsf ](/commands/rclone_lsf/ ) has
a compatible format that can be used to export file lists from remotes for
input to `--files-from-raw` .
2018-03-01 10:59:50 +01:00
2021-01-21 15:47:35 +01:00
### `--ignore-case` - make searches case insensitive
2016-07-05 13:33:59 +02:00
2021-11-04 12:50:43 +01:00
By default, rclone filter patterns are case sensitive. The `--ignore-case`
2021-01-21 15:47:35 +01:00
flag makes all of the filters patterns on the command line case
insensitive.
2020-04-03 11:36:24 +02:00
2021-01-21 15:47:35 +01:00
E.g. `--include "zaphod.txt"` does not match a file `Zaphod.txt` . With
`--ignore-case` a match is made.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
## Quoting shell metacharacters
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Rclone commands with filter patterns containing shell metacharacters may
not as work as expected in your shell and may require quoting.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. linux, OSX (`*` metacharacter)
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
* `--include \*.jpg`
* `--include '*.jpg'`
* `--include='*.jpg'`
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Microsoft Windows expansion is done by the command, not shell, so
`--include *.jpg` does not require quoting.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
If the rclone error
`Command .... needs .... arguments maximum: you provided .... non flag arguments:`
is encountered, the cause is commonly spaces within the name of a
remote or flag value. The fix then is to quote values containing spaces.
2015-12-29 20:34:10 +01:00
2021-01-21 15:47:35 +01:00
## Other filters
2015-12-29 20:34:10 +01:00
2021-01-21 15:47:35 +01:00
### `--min-size` - Don't transfer any file smaller than this
2015-12-29 20:34:10 +01:00
2021-01-21 15:47:35 +01:00
Controls the minimum size file within the scope of an rclone command.
2024-09-06 13:28:29 +02:00
Default units are `KiB` but abbreviations `B` , `K` , `M` , `G` , `T` or `P` are valid.
2015-12-29 20:34:10 +01:00
2021-08-21 19:54:21 +02:00
E.g. `rclone ls remote: --min-size 50k` lists files on `remote:` of 50 KiB
2021-01-21 15:47:35 +01:00
size or larger.
2020-05-11 14:25:39 +02:00
2022-07-26 18:53:35 +02:00
See [the size option docs ](/docs/#size-option ) for more info.
2021-01-21 15:47:35 +01:00
### `--max-size` - Don't transfer any file larger than this
2020-05-11 14:25:39 +02:00
2021-01-21 15:47:35 +01:00
Controls the maximum size file within the scope of an rclone command.
2024-09-06 13:28:29 +02:00
Default units are `KiB` but abbreviations `B` , `K` , `M` , `G` , `T` or `P` are valid.
2015-12-29 20:34:10 +01:00
2021-08-21 19:54:21 +02:00
E.g. `rclone ls remote: --max-size 1G` lists files on `remote:` of 1 GiB
2021-01-21 15:47:35 +01:00
size or smaller.
2015-12-29 20:34:10 +01:00
2022-07-26 18:53:35 +02:00
See [the size option docs ](/docs/#size-option ) for more info.
2021-01-21 15:47:35 +01:00
### `--max-age` - Don't transfer any file older than this
2015-12-29 20:34:10 +01:00
2021-01-21 15:47:35 +01:00
Controls the maximum age of files within the scope of an rclone command.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
`--max-age` applies only to files and not to directories.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. `rclone ls remote: --max-age 2d` lists files on `remote:` of 2 days
old or less.
2015-09-27 17:13:20 +02:00
2022-07-26 18:53:35 +02:00
See [the time option docs ](/docs/#time-option ) for valid formats.
2021-01-21 15:47:35 +01:00
### `--min-age` - Don't transfer any file younger than this
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Controls the minimum age of files within the scope of an rclone command.
(see `--max-age` for valid formats)
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
`--min-age` applies only to files and not to directories.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
E.g. `rclone ls remote: --min-age 2d` lists files on `remote:` of 2 days
old or more.
2015-09-27 17:13:20 +02:00
2022-07-26 18:53:35 +02:00
See [the time option docs ](/docs/#time-option ) for valid formats.
2021-01-21 15:47:35 +01:00
## Other flags
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
### `--delete-excluded` - Delete files on dest excluded from sync
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
**Important** this flag is dangerous to your data - use with `--dry-run`
and `-v` first.
2018-11-12 15:29:37 +01:00
2021-02-10 19:21:41 +01:00
In conjunction with `rclone sync` , `--delete-excluded` deletes any files
2021-01-21 15:47:35 +01:00
on the destination which are excluded from the command.
2018-11-12 15:29:37 +01:00
2023-01-20 21:47:36 +01:00
E.g. the scope of `rclone sync --interactive A: B:` can be restricted:
2018-11-12 15:29:37 +01:00
2021-01-21 15:47:35 +01:00
rclone --min-size 50k --delete-excluded sync A: B:
2015-09-27 17:13:20 +02:00
2021-08-21 19:54:21 +02:00
All files on `B:` which are less than 50 KiB are deleted
2021-03-02 20:11:57 +01:00
because they are excluded from the rclone sync command.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
### `--dump filters` - dump the filters to the output
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Dumps the defined filters to standard output in regular expression
format.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
Useful for debugging.
2015-09-27 17:13:20 +02:00
2021-01-21 15:47:35 +01:00
## Exclude directory based on a file
2017-11-09 10:40:47 +01:00
2021-01-21 15:47:35 +01:00
The `--exclude-if-present` flag controls whether a directory is
within the scope of an rclone command based on the presence of a
2022-06-08 09:29:01 +02:00
named file within it. The flag can be repeated to check for
multiple file names, presence of any of them will exclude the
directory.
2017-11-09 10:40:47 +01:00
2021-01-21 15:47:35 +01:00
This flag has a priority over other filter flags.
2017-11-09 10:40:47 +01:00
2021-01-21 15:47:35 +01:00
E.g. for the following directory structure:
2017-11-09 10:40:47 +01:00
dir1/file1
dir1/dir2/file2
dir1/dir2/dir3/file3
dir1/dir2/dir3/.ignore
2021-01-21 15:47:35 +01:00
The command `rclone ls --exclude-if-present .ignore dir1` does
not list `dir3` , `file3` or `.ignore` .
2022-08-04 19:19:05 +02:00
## Metadata filters {#metadata}
The metadata filters work in a very similar way to the normal file
name filters, except they match [metadata ](/docs/#metadata ) on the
object.
The metadata should be specified as `key=value` patterns. This may be
wildcarded using the normal [filter patterns ](#patterns ) or [regular
expressions](#regexp).
For example if you wished to list only local files with a mode of
`100664` you could do that with:
rclone lsf -M --files-only --metadata-include "mode=100664" .
Or if you wished to show files with an `atime` , `mtime` or `btime` at a given date:
rclone lsf -M --files-only --metadata-include "[abm]time=2022-12-16*" .
Like file filtering, metadata filtering only applies to files not to
directories.
The filters can be applied using these flags.
- `--metadata-include` - Include metadatas matching pattern
- `--metadata-include-from` - Read metadata include patterns from file (use - to read from stdin)
- `--metadata-exclude` - Exclude metadatas matching pattern
- `--metadata-exclude-from` - Read metadata exclude patterns from file (use - to read from stdin)
- `--metadata-filter` - Add a metadata filtering rule
- `--metadata-filter-from` - Read metadata filtering patterns from a file (use - to read from stdin)
Each flag can be repeated. See the section on [how filter rules are
applied](#how-filter-rules-work) for more details - these flags work
in an identical way to the file name filtering flags, but instead of
file name patterns have metadata patterns.
2021-01-21 15:47:35 +01:00
## Common pitfalls
The most frequent filter support issues on
2021-02-16 23:16:03 +01:00
the [rclone forum ](https://forum.rclone.org/ ) are:
2017-11-09 10:40:47 +01:00
2021-01-21 15:47:35 +01:00
* Not using paths relative to the root of the remote
* Not using `/` to match from the root of a remote
* Not using `**` to match the contents of a directory
2017-11-09 10:40:47 +01:00