Mac-Osx

在 rsync 或 afpd 中將 UTF-8 NFD 文件名轉換為 UTF-8 NFC

  • February 5, 2020

我有一個執行 FreeNAS 8 的家庭文件伺服器。幾天前,我使用 rsync 從 Mac 上傳我的整個 iTunes 庫,這樣我就可以通過網路載入我的庫,而不是從慢速 USB 驅動器載入。這主要是有效的,iTunes 現在執行得更好,但我在訪問任何包含非 ascii 字元的歌曲時遇到了問題(我在載入 Queensrÿche 曲目時首先註意到了這個問題)。這些文件將顯示在 Finder 中,但任何訪問它們的嘗試都會使它們消失,直到我重新連接到伺服器。

經過一番研究,我發現這是因為 OSX 使用了與 Linux 不同的 UTF 字元順序。OSX 文件系統使用 Unicode Normalization Form D (NFD),而 linux 使用 Form C (NFC)。Rsync 在執行從我的 mac 複製到伺服器時不會轉換這些形式,現在當 iTunes 嘗試通過網路訪問具有特殊字元的文件時,伺服器上的文件編碼錯誤,afpd 報告它們沒有不存在。

解決這個問題的最佳方法是什麼?是否可以在將基礎庫上傳到伺服器時使 rsync 執行 unicode 轉換?我可以將 afpd 配置為以 NFD 格式傳輸/接收文件名嗎?是否有一個簡單的解決方案來更改伺服器上的文件名?我發現了一些關於名為 convmv 的程序的東西,但我不知道我是否可以在 FreeNAS 上執行它。

**注意:**如果您使用 3.0.0 或更新版本的 rsync,--iconv其他答案中提到的選項顯然是更好的解決方案。

應該工作是在源目錄和掛載的遠端文件系統(SMB、NFS、AFP)之間進行 rsync,rsync 只會將其視為本地文件系統。

但是,我不知道這在實踐中效果如何,並且您必須解決不同的問題,例如預設情況下不會使用 delta-transfer 算法(因為源和目標是“本地”)(也許—— no-whole-file 會起作用嗎?),您必須檢查,例如,SMB 是否有效地保留了修改時間等。

引用自:https://serverfault.com/questions/397420