Skip to main content

rclone --filter

The filter engine gives you ordered allow/deny control for complex selection logic that include/exclude flags alone cannot express cleanly. This guide focuses on rule precedence, readability, and safe testing so advanced filters remain understandable and operationally safe.

Syntax

rclone copy SRC DST --filter "+ PATTERN" --filter "- PATTERN"

Inline Rule Example

rclone copy /srv/app remote:backup/app \
--filter "+ **/*.php" \
--filter "+ **/*.json" \
--filter "- **"
/etc/rclone/app.filter
+ **/*.php
+ **/*.json
- **
rclone copy /srv/app remote:backup/app --filter-from /etc/rclone/app.filter --dry-run -vv

Notes

  • Rule order matters. First matching rule wins.
  • Put specific allow rules before broad deny rules.
  • Prefer --filter-from for long rule sets.

Examples with Output

1. Allow PHP then deny rest

Input command:

rclone copy /srv/app remote:backup/app --filter "+ **/*.php" --filter "- **" --dry-run

Expected output:

NOTICE: filter rules applied
Would transfer 64 files

2. Allow JSON and YAML

Input command:

rclone copy /srv/app remote:backup/app --filter "+ **/*.json" --filter "+ **/*.yml" --filter "- **" --dry-run

Expected output:

NOTICE: JSON/YML rules matched
Would transfer 28 files

3. Deny logs with filter

Input command:

rclone sync /srv/app remote:backup/app --filter "- **/*.log" --dry-run

Expected output:

NOTICE: log files denied
Would transfer 93 files

4. Filter by folder allow-list

Input command:

rclone copy /srv/www remote:backup/www --filter "+ wp-content/uploads/**" --filter "- **" --dry-run

Expected output:

NOTICE: uploads folder allowed
Would transfer 241 files

5. Filter include then deny cache

Input command:

rclone copy /srv/app remote:backup/app --filter "+ **/*.php" --filter "- **/cache/**" --filter "- **" --dry-run

Expected output:

NOTICE: php allowed, cache denied
Would transfer 52 files

6. Use filter-from file

Input command:

rclone copy /srv/app remote:backup/app --filter-from /etc/rclone/app.filter --dry-run

Expected output:

NOTICE: loaded filter-from rules
Would transfer 73 files

7. Filter-from verbose

Input command:

rclone copy /srv/app remote:backup/app --filter-from /etc/rclone/app.filter --dry-run -vv

Expected output:

DEBUG: Matched include rule: src/main.php
INFO : 73 files selected by filter

8. Filter for docs and images

Input command:

rclone copy /srv/site remote:backup/site --filter "+ **/*.md" --filter "+ **/*.png" --filter "- **" --dry-run

Expected output:

NOTICE: docs/images selected
Would transfer 88 files

9. Filter to skip secrets

Input command:

rclone sync /srv/app remote:backup/app --filter "- **/.env*" --filter "- **/*id_rsa*" --dry-run

Expected output:

NOTICE: secret files denied
Would transfer 95 files

10. Filter by release tag files

Input command:

rclone copy /srv/releases remote:archive/releases --filter "+ **/*-v2026*.tar.gz" --filter "- **" --dry-run

Expected output:

NOTICE: tagged release artifacts selected
Would transfer 6 files

11. Filter with max-age

Input command:

rclone copy /srv/logs remote:archive/logs --filter "+ **/*.log" --filter "- **" --max-age 30d --dry-run

Expected output:

NOTICE: filter + max-age applied
Would transfer 21 files

12. Filter for migration sql

Input command:

rclone copy /srv/db remote:archive/db --filter "+ **/migration/*.sql" --filter "- **" --dry-run

Expected output:

NOTICE: migration SQL selected
Would transfer 9 files

13. Filter for terraform module

Input command:

rclone copy /srv/iac remote:backup/iac --filter "+ modules/**" --filter "+ **/*.tf" --filter "- **" --dry-run

Expected output:

NOTICE: modules and tf files selected
Would transfer 34 files

14. Filter with checksum

Input command:

rclone copy /srv/app remote:backup/app --filter-from /etc/rclone/app.filter --checksum --dry-run

Expected output:

NOTICE: checksum mode with filter rules
Would transfer 19 changed files

15. Filter sync with backup-dir

Input command:

rclone sync /srv/app remote:backup/app --filter-from /etc/rclone/app.filter --backup-dir remote:backup/app-deleted --dry-run

Expected output:

NOTICE: backup-dir active for filtered sync
Would copy 73 files, move 4 deletes