跳至主要内容

Rclone 檔案過濾

Rclone 同步時的檔案過濾機制,支援多種過濾規則來排除不需要同步的檔案和目錄。

基本過濾方式

命令列參數

# 排除特定檔案類型
rclone sync source dest --exclude "*.tmp"
rclone sync source dest --exclude "*.log"

# 排除多種檔案類型
rclone sync source dest --exclude "*.tmp" --exclude "*.log" --exclude "*.cache"

# 排除特定目錄
rclone sync source dest --exclude "/temp/"
rclone sync source dest --exclude "node_modules/"

使用過濾檔案

# 使用 .rcloneignore 檔案
rclone sync source dest --exclude-from=.rcloneignore

# 指定過濾檔案路徑
rclone sync source dest --exclude-from=/path/to/filter-file.txt

.rcloneignore 檔案格式

基本語法

# .rcloneignore 範例

# 註解行以 # 開頭

# 排除特定檔案類型
*.tmp
*.log
*.cache
*.DS_Store

# 排除特定檔案名
Thumbs.db
.localized

# 排除目錄
node_modules/
.git/
.vscode/
__pycache__/

# 排除隱藏檔案和目錄
.*

# 但包含特定隱藏檔案
!.gitignore
!.env.example

萬用字元規則

模式說明範例
*匹配任意字元*.txt 匹配所有 .txt 檔案
?匹配單一字元file?.txt 匹配 file1.txt, fileA.txt
**匹配任意層級目錄**/temp/** 匹配任何層級的 temp 目錄
[abc]匹配括號內任一字元file[123].txt 匹配 file1.txt, file2.txt
[a-z]匹配範圍內字元[a-z]*.txt 匹配以小寫字母開頭的 .txt 檔案

常用過濾規則

開發專案過濾

# Node.js 專案
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.npm
.yarn-integrity
dist/
build/

# Python 專案
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
.env
venv/

# Java 專案
*.class
*.jar
*.war
*.ear
target/
.gradle/
build/

# IDE 檔案
.vscode/
.idea/
*.swp
*.swo
*~

系統檔案過濾

# macOS
.DS_Store
.AppleDouble
.LSOverride
Icon?
._*
.Spotlight-V100
.Trashes

# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/

# Linux
*~
.fuse_hidden*
.directory
.Trash-*

媒體檔案過濾

# 暫存檔案
*.tmp
*.temp
*.bak
*.backup
*.old

# 大型媒體檔案 (選擇性排除)
*.mov
*.mp4
*.avi
*.mkv
*.iso

# 壓縮檔案
*.zip
*.rar
*.7z
*.tar.gz

進階過濾技巧

包含規則 (Whitelist)

# 只同步特定檔案類型
rclone sync source dest --include "*.md" --include "*.txt"

# 先排除所有,再包含特定檔案
rclone sync source dest --exclude "*" --include "*.important"

條件過濾

# 按檔案大小過濾
rclone sync source dest --max-size 100M # 排除大於 100MB 的檔案
rclone sync source dest --min-size 1k # 排除小於 1KB 的檔案

# 按修改時間過濾
rclone sync source dest --max-age 30d # 只同步 30 天內修改的檔案
rclone sync source dest --min-age 1h # 排除 1 小時內修改的檔案

複雜過濾組合

# 組合多種過濾條件
rclone sync source dest \
--exclude-from=.rcloneignore \
--max-size 50M \
--min-age 1h \
--exclude "*.tmp"

實用過濾檔案範例

Obsidian 筆記過濾

# .rcloneignore for Obsidian

# Obsidian 系統檔案
.obsidian/workspace*
.obsidian/cache
.obsidian/logs/
.obsidian/backlink/

# 暫存檔案
*.tmp
.trash/

# 系統檔案
.DS_Store
Thumbs.db

# 大型附件 (選擇性)
*.mp4
*.mov
*.zip

程式碼專案過濾

# .rcloneignore for Code Projects

# 依賴目錄
node_modules/
vendor/
.gradle/
target/

# 建置輸出
dist/
build/
out/
*.o
*.exe

# IDE 設定
.vscode/settings.json
.idea/workspace.xml

# 日誌檔案
*.log
logs/

# 環境檔案
.env.local
.env.production

測試過濾規則

乾跑模式測試

# 測試過濾規則,不實際同步
rclone sync source dest --exclude-from=.rcloneignore --dry-run -v

# 只列出會被同步的檔案
rclone ls source --exclude-from=.rcloneignore

# 列出會被排除的檔案
rclone ls source --exclude-from=.rcloneignore --exclude "*" --include "*"

驗證過濾效果

# 比較過濾前後的檔案數量
echo "Total files:"
rclone ls source | wc -l

echo "Files after filtering:"
rclone ls source --exclude-from=.rcloneignore | wc -l

效能考量

過濾順序最佳化

# 先用簡單規則過濾大量檔案
rclone sync source dest \
--exclude "node_modules/**" \
--exclude "*.log" \
--exclude-from=.rcloneignore

大型目錄處理

# 對大型目錄使用 --fast-list
rclone sync source dest \
--exclude-from=.rcloneignore \
--fast-list

疑難排解

常見問題

# 檢查過濾規則是否生效
rclone ls source --exclude-from=.rcloneignore -v

# 測試特定檔案是否被過濾
rclone ls source --include "specific-file.txt" --exclude-from=.rcloneignore

# 忽略過濾檔案中的錯誤
rclone sync source dest --exclude-from=.rcloneignore --ignore-errors

除錯技巧

# 顯示詳細過濾資訊
rclone sync source dest --exclude-from=.rcloneignore -vv --dry-run

# 只顯示被排除的檔案
rclone ls source --exclude "*" -v

See Also