常見問題:macOS(Finder)標籤機制與本應用的實現說明
1. macOS 的標籤(Finder Tags)是什麼?存在哪裡?
Finder 標籤屬於檔案的元數據,不會寫入檔案內容本身,而是儲存在檔案的擴展屬性(xattr)裡,主要鍵名是:
com.apple.metadata:_kMDItemUserTags
其內容是一個二進制 plist,本質上是「標籤陣列」。每個標籤元素包含標籤名與顏色編號,顏色編號範圍 0–7(0 無色,1 灰,2 綠,3 紫,4 藍,5 黃,6 紅,7 橙)。
因此:
- 「給檔案打標籤」這件事,本質上就是「把標籤元數據寫入 xattr」;
- 是否能被 Spotlight 搜尋到則是另一回事。
2.關於舊擴展屬性 com.apple.FinderInfo
com.apple.FinderInfo 是較早期 macOS/Finder 的機制之一:
- 舊機制:它只能表示一種顏色,且不包含標籤名稱。
- 新系統仍可能寫入:即使現在主要以
_kMDItemUserTags為準,Finder 仍可能同時寫入/更新com.apple.FinderInfo(用於相容舊系統)。
更具體來說:
- 僅當檔案的某個標籤名稱存在於 Finder 的自定義標籤列表中時,Finder 才可能寫入/更新
com.apple.FinderInfo的顏色資訊; - 當存在多種顏色標籤時,會寫入「有效列表中最後一種顏色」的那一個。
3. 多語言問題:為什麼同一個顏色在不同語言系統會變成「不同標籤」?
macOS 寫入的是本地化後的標籤名稱字串:
- 英文系統寫入
Red - 中文系統寫入
紅色
它們在系統看來是兩個不同標籤。 本應用透過系統 API 取得預設顏色標籤名稱,因此返回結果會受系統語言環境影響(「系統設定 → 通用 → 語言與地區 / 界面語言」,選擇「自動」時跟隨當前系統語言)。如果系統語言與應用語言不一致,就可能出現標籤名稱不一致的情形。
4. 為什麼應用設定中要和 Finder 的標籤配置保持一致?
- macOS 的限制下,應用通常無法完整讀取 Finder 的「自定義標籤名稱↔顏色」配置清單。
- 讀取標籤時,系統 API 往往只提供「標籤名稱」,而不直接給出顏色;若應用未配置該名稱對應的顏色,顏色顯示可能不正確。
- 寫入標籤時,系統 API 也通常只傳遞「標籤名稱」,最終顏色由 Finder 對該名稱的定義決定。
5. 標籤元數據在不同磁盤/網絡位置如何保存?(APFS / AppleDouble / NTFS ADS)
5.1 APFS(本機磁盤)——原生保存 xattr(最可靠)
APFS 原生支援擴展屬性,標籤元數據直接保存在檔案自身的 xattr 中。
5.2 不支援/不完整支援 xattr 的位置——AppleDouble(._原檔名)
當目標檔案系統或協議無法可靠保存 xattr(常見於 FAT32、exFAT、網路磁碟:SMB/WebDAV/NFS 等),macOS 會把元數據存到 AppleDouble 伴隨檔案:
._原檔名(例如photo.jpg對應._photo.jpg)
可見性:
- Finder 永不顯示(即使開啟顯示隱藏檔案也無法看到);
- 終端
ls -la可見; - Windows 開啟顯示隱藏檔案即可看到(因此會看到很多
._小檔案)。
重要提示(標籤「丟失」的常見原因):
- 如果你在 Windows 或某些工具中移動/複製檔案時只移動了原檔案,把
._檔案留在原地,那麼到新位置後標籤會「看起來消失」。 - 只要之後把匹配的
._檔案也移過去,標籤通常可以恢復。
5.3 SMB 连接 NTFS:可能使用 ADS(可選資料流)
當透過 SMB 存取 NTFS 且滿足伺服器/協議配置條件時,macOS 可能不會生成 ._ 檔案,而是把元數據寫入 NTFS 的 ADS(Alternate Data Streams,可選資料流):
- ADS 是 NTFS 的特性:一個檔案除了「主資料」,還可以附帶若干「看不見的附加資料流」,用來存放額外元數據。
- 好處:在 NTFS 內部移動/複製時,這些元數據通常能一起保留,對 Windows 使用者也相對「乾淨」(不會產生
._檔案)。
但要注意:
- 當你把檔案從 NTFS 移動/複製到 FAT32 或 exFAT時,目標檔案系統不支援 ADS/xattr 等元數據,Windows 往往會彈出類似提示:
「確實要在不複製檔案屬性的情況下複製檔案?」 這表示這些附加元數據將被丟棄;拷過去後標籤可能無法保留。
6. 如何查看檔案的標籤 xattr?
命令行 xattr 不方便:它不支援處理/顯示 com.apple.metadata:_kMDItemUserTags 这類二進制 plist屬性,必須使用 -px 选项以十六進制方式才能正確輸出。
建議使用第三方工具:
- xattred:可直觀查看並驗證
_kMDItemUserTags、com.apple.FinderInfo等 xattr。
7. Spotlight 与標籤有什麼關係?標籤是否依賴 Spotlight?
- 標籤本身不依賴 Spotlight:標籤在你打上的那一刻就已寫入檔案的 xattr,是否被索引並不影響標籤「存在與否」。
- Spotlight 只是索引引擎:它負責把標籤名稱等元數據建立索引,用於系統級搜尋。
- macOS 通常會在檔案移動/重命名等操作後自動維護索引;但外接磁盤、網路磁盤,以及被加入「搜尋隱私」的目錄可能不會被 Spotlight 索引。
8. 本應用的「增強索引」做了什麼?
當 Spotlight 无法覆蓋(外接磁盤/網路磁盤/隱私排除目錄等)時,本應用提供增強索引:
- 你在應用內瀏覽資料夾時,應用會記錄該資料夾內檔案的標籤資訊;
- 你在目錄樹中選擇查看某個標籤的所有檔案時,應用會在 Spotlight 結果基礎上補充展示增強索引命中的檔案;
- 可在資料夾上右鍵選擇「掃描並更新」來刷新該資料夾中內容的標籤索引。