FilePilot 是一个本地规则驱动的文件整理工具,用来整理 Mac 和 Windows 电脑里杂乱的桌面、下载、文档和工作资料。
它的核心思想很简单:先扫描,先生成整理建议,先让人确认,然后才移动文件。FilePilot 不联网、不使用 AI、不做定时任务、不提供网站、不自动删除文件。
- 桌面、下载目录、文档目录长期堆积文件的人。
- 想把文件归档到统一
FileHub目录的人。 - 希望先预览整理计划,确认后再移动文件的人。
- 同时需要管理私人 Mac 和工作 Windows 电脑的人。
- 不想把私人文件上传到云端或 AI 服务的人。
- 默认只生成整理建议,不移动文件。
- 无法分类的文件默认保持原位置。
- 不直接删除任何文件。
- 执行整理前必须人工确认。
dry-run只预览,不移动。apply才会真正移动文件。- 每次 apply 都生成 rollback JSON,可以回滚。
- 文件名冲突时不会覆盖,会自动追加
_1、_2。 - 每次运行都会写入
logs/latest.log和reports/status.json。
- 扫描指定目录。
- 支持
mac、windows、customprofile。 - 读取 YAML 配置:
config/profiles.yamlconfig/project_rules.yamlconfig/rules.yamlconfig/ignore.yaml
- 根据项目关键词、主题关键词、工作场景、数据规则、扩展名生成分类建议。
- 生成文件清单、整理计划、无法分类清单。
- GUI 中查看、搜索、过滤、修改整理计划。
- GUI 中人工处理无法分类文件。
- 支持 dry-run、apply、rollback。
- 支持 Windows exe 打包,运行端不需要安装 Python。
FilePilot/
├── config/
│ ├── profiles.yaml
│ ├── project_rules.yaml
│ ├── rules.yaml
│ └── ignore.yaml
├── filepilot/
│ ├── scanner.py
│ ├── classifier.py
│ ├── planner.py
│ ├── organizer.py
│ ├── rollback.py
│ └── utils.py
├── filepilot_gui/
│ ├── app.py
│ ├── main_window.py
│ ├── pages/
│ ├── widgets/
│ └── resources/
├── packaging/
│ ├── FilePilot.spec
│ ├── build_windows.ps1
│ ├── build_windows.bat
│ └── filepilot_gui_entry.py
├── reports/
├── logs/
├── main.py
├── requirements.txt
├── requirements-build.txt
└── README.md
如果你拿到的是已经打包好的 FilePilot.exe,不需要安装 Python,也不需要安装 PySide6。
推荐把它放在一个固定目录,例如:
D:\Tools\FilePilot\
目录建议:
D:\Tools\FilePilot\
├── FilePilot.exe
├── config\
├── reports\
└── logs\
第一次启动时,如果 exe 同目录没有 config,FilePilot 会自动生成一份默认配置。reports 和 logs 会在运行后自动生成。
双击:
FilePilot.exe
然后按 GUI 流程操作:
- 进入“配置”页。
- 选择
windows或customprofile。 - 添加要扫描的目录,比如桌面、下载、文档。
- 选择目标 FileHub 目录,比如
D:\FileHub。 - 点击“保存配置”。
- 点击“开始扫描”。
- 到“整理计划”页检查目标路径。
- 到“无法分类”页人工处理未命中文件。
- 到“执行”页先点“预览执行”。
- 确认无误后再点“执行整理”。
- 如需撤销,到“回滚”页选择 rollback 文件执行回滚。
建议 Python 3.10+。
macOS / Linux:
python3 --version
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
python3 -m filepilot_gui.appWindows PowerShell:
python --version
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
python -m filepilot_gui.app如果 macOS 提示 Could not find the Qt platform plugin "cocoa",优先确认当前激活的是 FilePilot 自己的虚拟环境:
which python3
python3 -c "import sys, PySide6; print(sys.executable); print(PySide6.__file__)"如果 PySide6 安装不完整,可以重装:
python3 -m pip install --force-reinstall PySide6
python3 -m filepilot_gui.appFilePilot 的 GUI 启动入口会自动配置 PySide6 的 Qt 插件路径,并处理 macOS 路径包含空格时的 Qt 运行时缓存问题。
打开 FilePilot 后,先进入“配置”页。
你需要设置:
Profile:选择mac、windows或custom。FileHub 目标目录:整理后的根目录,例如~/FileHub或D:\FileHub。扫描目录:要整理的目录,例如 Desktop、Downloads、Documents。Ignore patterns:扫描时跳过的目录或文件,例如.git、node_modules、AppData。
配置好后点击:
保存配置
开始扫描
扫描完成后进入“扫描结果”页。
这里可以看到:
- 扫描文件数。
- 可分类文件数。
- 无法分类文件数。
- 扫描耗时。
- 每个文件的扩展名、大小、修改时间、建议分类、命中规则。
你可以搜索文件名或路径,也可以打开文件所在目录。
进入“整理计划”页,这是最关键的一步。
表格会显示:
- 文件名。
- 目标分类。
- 分类层级。
- 命中规则。
- 命中关键词。
- 目标路径。
- 置信分。
- 状态。
重点检查 目标路径。FilePilot 会尽量显示有意义的 FileHub 相对路径,例如:
01_Work/WeeklyReport/2026-05/AI周报.docx
02_Project/AirView/切换问题定位记录.md
03_Knowledge/AI/AI_Coding/Codex使用技巧.pdf
07_Data/KPI/2026-05/UE_KPI.csv
如果文件只是命中了大类,没有识别出具体项目或主题,FilePilot 会保留原始来源路径,避免全部塞到同一个目录。例如桌面来的普通文件会进入:
01_Work/Desktop/客户资料/普通合同.docx
你可以在整理计划页:
- 取消某条移动计划。
- 修改目标分类。
- 直接修改目标路径。
- 批量设置分类。
- 将规则加入长期项目规则。
- 打开原文件。
- 打开原文件所在目录。
低置信度或需要复核的文件会标记为 need_review。
进入“无法分类”页。
这些文件默认不会移动。你可以选择:
- 保持原位置。
- 从下拉框选择一个分类。
- 输入自定义目标路径。
- 加入整理计划。
如果你把无法分类文件手动选到 01_Work、03_Knowledge、07_Data 这类大类,FilePilot 也会保留来源路径,例如:
07_Data/Downloads/raw/unknown.csv
进入“执行”页,先点:
预览执行
dry-run 不会移动文件,只会检查计划是否可执行。你可以确认:
- 即将移动文件数。
- 保持原位置文件数。
- 文件名冲突数。
- 将创建目录数。
- 错误列表。
确认无误后点击:
执行整理
GUI 会弹出二次确认。确认后才会真正移动文件。
执行完成后会显示:
- move_result 报告路径。
- rollback 文件路径。
- 成功数。
- 失败或跳过数。
如果整理后发现不合适,可以进入“回滚”页。
选择对应的:
rollback_YYYY-MM-DD-HHMMSS.json
先预览,再执行回滚。回滚也不会覆盖同名文件。
运行记录会保存在:
logs/latest.log
reports/status.json
reports/file_inventory_YYYY-MM-DD.csv
reports/organize_plan_YYYY-MM-DD.csv
reports/organize_plan_YYYY-MM-DD.md
reports/unclassified_YYYY-MM-DD.csv
reports/move_result_YYYY-MM-DD-HHMMSS.json
reports/rollback_YYYY-MM-DD-HHMMSS.json
GUI 的“日志”页可以查看最新日志和状态摘要。
config/profiles.yaml 定义 Mac 和 Windows 的默认扫描目录与 FileHub 根目录。
示例:
mac:
root_output: ~/FileHub
scan_dirs:
- ~/Desktop
- ~/Downloads
- ~/Documents
exclude_dirs:
- ~/Library
- ~/Applications
windows:
root_output: C:/FileHub
scan_dirs:
- C:/Users/YourName/Desktop
- C:/Users/YourName/Downloads
- C:/Users/YourName/Documents
exclude_dirs:
- C:/Users/YourName/AppData
- C:/Windows
- C:/Program FilesGUI 中保存 custom 配置后,会写入:
reports/gui_config_last.json
config/project_rules.yaml 是多级分类的核心。
匹配优先级:
项目关键词规则 > 主题关键词规则 > 工作/数据规则 > 文件类型规则 > 无法分类
规则会综合匹配:
- 文件名。
- 原始路径。
- 父目录。
- 扩展名。
- 修改时间。
示例:
project_rules:
AI_For_Work:
target: "02_Project/AI_For_Work"
priority: 100
keywords:
- "AI For Work"
- "AI提效"
- "Prompt库"
work_rules:
WeeklyReport:
target: "01_Work/WeeklyReport/{yyyy_mm}"
priority: 85
keywords:
- "周报"
- "双周报"
- "月报"{yyyy_mm} 会根据文件修改时间自动展开,例如:
01_Work/WeeklyReport/2026-05
分类结果会写入整理计划 CSV:
classification_level
matched_rule
matched_keywords
confidence_score
target_category
target_path
config/rules.yaml 是兜底规则,主要按扩展名或简单关键词分类。
如果只命中这类大类目录,例如:
01_Work
03_Knowledge
07_Data
FilePilot 会将其标记为需要复核,并保留来源路径:
01_Work/Desktop/...
03_Knowledge/Downloads/...
07_Data/Documents/...
config/ignore.yaml 定义扫描时跳过的目录或文件名。
默认会跳过:
ignore_patterns:
- .git
- node_modules
- __pycache__
- .DS_Store
- AppData
- Library
- Program Files
- Windows
- .venv
- venvGUI 是推荐方式,CLI 适合高级用户或脚本化。
只生成文件清单,不生成移动计划,也不会移动文件。
python3 main.py scan --profile mac
python3 main.py scan --profile windows输出:
reports/file_inventory_YYYY-MM-DD.csv
logs/latest.log
reports/status.json
python3 main.py plan --profile mac
python3 main.py plan --profile windows输出:
reports/file_inventory_YYYY-MM-DD.csv
reports/organize_plan_YYYY-MM-DD.csv
reports/organize_plan_YYYY-MM-DD.md
reports/unclassified_YYYY-MM-DD.csv
你可以先打开 Markdown 报告查看摘要:
reports/organize_plan_YYYY-MM-DD.md
也可以手动编辑 CSV 中的 target_path 或 status。
dry-run 是默认模式,不移动文件。
python3 main.py organize --profile mac --plan reports/organize_plan_YYYY-MM-DD.csv --dry-run也可以省略 --dry-run:
python3 main.py organize --profile mac --plan reports/organize_plan_YYYY-MM-DD.csv只有显式传入 --apply 才会移动文件。
python3 main.py organize --profile mac --plan reports/organize_plan_YYYY-MM-DD.csv --applyapply 会:
- 检查源文件是否存在。
- 创建目标目录。
- 遇到同名文件时自动追加序号。
- 记录每个移动操作。
- 生成 rollback JSON。
python3 main.py rollback --file reports/rollback_YYYY-MM-DD-HHMMSS.json回滚会按相反顺序移动文件。如果原位置已有同名文件,也不会覆盖。
如果你要生成一个可以直接发给 Windows 使用的 exe,需要在 Windows 电脑上打包。
进入项目目录后运行:
.\packaging\build_windows.ps1如果 PowerShell 执行策略拦截:
powershell -ExecutionPolicy Bypass -File .\packaging\build_windows.ps1或者双击:
packaging\build_windows.bat
打包脚本会自动安装构建依赖并执行 PyInstaller:
python -m pip install -r requirements-build.txt
python -m PyInstaller --clean --noconfirm packaging\FilePilot.spec打包结果:
dist\FilePilot.exe
dist\FilePilot_Windows.zip
说明:
- 构建机需要 Python 和构建依赖。
- 使用 exe 的电脑不需要 Python。
config会被打进 exe,同时也会复制到dist\config,方便你修改规则。reports和logs会生成在 exe 同目录。
00_Inbox
01_Work
02_Project
03_Knowledge
04_Output
05_Assets
06_Code
07_Data
08_Archive
99_TrashReview
推荐的 FileHub 结构大致如下:
FileHub/
├── 00_Inbox/
├── 01_Work/
│ ├── WeeklyReport/
│ ├── Meeting/
│ ├── Presentation/
│ └── Management/
├── 02_Project/
│ ├── AI_For_Work/
│ ├── AirView/
│ ├── Simulation_NPU/
│ ├── Personal_Blog/
│ ├── Quant_System/
│ └── FilePilot/
├── 03_Knowledge/
│ ├── AI/
│ ├── Wireless/
│ ├── Simulation/
│ └── Management/
├── 04_Output/
├── 05_Assets/
├── 06_Code/
├── 07_Data/
├── 08_Archive/
└── 99_TrashReview/
- 打开 GUI。
- 设置扫描目录和 FileHub 目录。
- 点击“开始扫描”。
- 检查“整理计划”。
- 人工处理“无法分类”。
- 先“预览执行”。
- 再“执行整理”。
- 如果整理结果不满意,使用 rollback 回滚。
- 根据本次复核经验,把长期规则补到
config/project_rules.yaml。
不会。FilePilot 不提供自动删除能力。
不会。如果目标目录已经有同名文件,FilePilot 会自动生成新文件名,例如:
report.pdf
report_1.pdf
report_2.pdf
默认不会。只有你在 GUI 中人工选择分类并加入整理计划,或手动编辑计划 CSV,才会进入移动流程。
这是为了保留来源线索。如果 FilePilot 只识别到大类,例如 01_Work,没有识别到具体项目,就会保留原始路径来源:
01_Work/Desktop/...
03_Knowledge/Downloads/...
07_Data/Documents/...
这样不会把文件粗暴塞到一个大目录里。
不强制需要。exe 内置默认配置,首次启动会自动生成 config。但如果你希望自己长期维护规则,建议把 config 文件夹和 exe 放在一起。
先确认当前 Python 环境是否正确:
which python3
python3 -c "import sys, PySide6; print(sys.executable); print(PySide6.__file__)"如果 PySide6 不完整,重装:
python3 -m pip install --force-reinstall PySide6运行测试:
python3 -m unittest discover -s testsGUI 启动 smoke test:
QT_QPA_PLATFORM=offscreen python3 -m filepilot_gui.app --qt-smoke-test检查打包入口语法:
python3 -m compileall packaging filepilot_gui- 不做定时任务。
- 不做 AI 分类。
- 不自动删除文件。
- 不自动发布。
- 不联网。
- 不提供网站。