
桌面上有十幾個叫 test、demo、final 的腳本時模型很適合建議分類和文件名。但如果把它返回的目錄和名字直接交給文件系統(tǒng)便利就可能變成覆蓋、越界寫入或誤刪。2026 年 10 月 13 日Ollama 與 Fly.io 的集成說明把憑據(jù)保管和可用實例范圍放到網(wǎng)關層。這種分工對本地整理工具同樣有啟發(fā)讓模型理解內(nèi)容讓程序決定它可以做什么。官方說明一份整理計劃必須回答什么每條建議至少包含源文件、目標分類、目標名字、理由。源文件由掃描器選定模型只能從固定分類中選擇并提供一個不含路徑分隔符的文件名。執(zhí)行前展示差異檢查同名目標保留原文件。“先寫新文件再刪除源文件”仍可能在部分失敗時丟失工作。第一版工具寧可只做復制等使用者確認歸檔可用再通過單獨流程處理舊文件。也不要自動執(zhí)行整理后的代碼??蓮秃藦椭频淖钚崿F(xiàn)示例只操作臨時教學目錄。保存為 organize.py 運行它會保留一個輸出臨時目錄便于查看結果沒有掃描你的桌面。from pathlib import Path import hashlib import tempfile ALLOWED {python, notes, other} def digest(path): return hashlib.sha256(path.read_bytes()).hexdigest() def planned_copy(src, out, category, name, applyFalse): if category not in ALLOWED: raise ValueError(未知分類) if (not name or name in {., ..} or any(c in name for c in /\\:\0) or Path(name).name ! name): raise ValueError(文件名包含路徑或特殊字符) if src.is_symlink() or not src.is_file(): raise ValueError(源文件不是普通文件) target out / category / name if target.exists() or target.is_symlink(): raise FileExistsError(target) before digest(src) if apply: target.parent.mkdir(parentsTrue, exist_okTrue) with target.open(xb) as dest: dest.write(src.read_bytes()) if digest(target) ! before: raise OSError(復制校驗失敗) return target root Path(tempfile.mkdtemp(prefixorganize-demo-)) src root / demo.py src.write_text(print(hello)\n, encodingutf-8) out root / organized target planned_copy(src, out, python, hello.py) assert not target.exists() # 默認只預覽 planned_copy(src, out, python, hello.py, applyTrue) assert src.exists() and digest(src) digest(target) try: planned_copy(src, out, python, ../escape.py) except ValueError: pass else: raise AssertionError(越界文件名未拒絕) print(源文件保留復制校驗通過, root)這個例子刻意不讓模型指定源路徑也不刪除任何文件。目標目錄由程序控制若擴展為多用戶服務還要處理目錄符號鏈接、并發(fā)改名和檢查后被替換的競爭條件。不能把單用戶臨時目錄中的測試當成安全沙箱驗證。pathlib 官方說明索引在復制成功后更新真正的歸檔索引應記錄源哈希、目標路徑、執(zhí)行時間與狀態(tài)。復制失敗的項目保留為失敗不要先給 README 寫一句“已歸檔”。撤銷也應引用這份清單而不是憑文件名猜測哪個是舊版本。本文實跑了預覽、復制、哈希一致和越界文件名拒絕模型分類效果、并發(fā)文件系統(tǒng)和真實桌面集成未測。整理工具最貼心的地方是能讓人放心點開“預覽”而不是讓人擔心下一次啟動。