Skip to main content

林協霆醫師

用 xattr 讓 Dropbox 忽略 node_modules 等不需同步的資料夾

Table of Contents

alias ignore=“xattr -w ‘com.apple.fileprovider.ignore#P’ 1”

因為在醫院跟家裡各有一台 mac ,兩邊的檔案同步很頻繁。用 git 管理雖然是穩建的做法,但常常忘記 commit ,結果回家就沒辦法繼跑進度。所以決定偷懶用 dropbox 來同步,但馬上踢到鐵版,對於 .venv, node_module 這種,理論上要被 gitignore 的東西,放在 dropbox 裡面就被瘋狂同步,上千個小文檔同步起來很可怕 ( 這明明就可以用 npm install 就解決的問題 ) 。

之前知道可以用 .nosync 當副檔名,但這也會產生問題,就會是改了路徑名稱,這個資料基本上是被視為不同的資料夾,一樣會跑不起來。查了一下後,發現可以用 apple 原生的 fileprovider api 可以讓雲端服務 icloud, dropbox, google drive 自動忽略這個檔案,不上傳到雲端,只需要 xattr -w ‘com.apple.fileprovider.ignore#P’ 1 path/to/your/file 完美解決這個問題,所以我把它寫成了一個 alias ,加入 zshrc 後,只要在 CLI 打 ignore somefile.txt 就可以忽略這個檔案了


原始 Facebook 貼文:連結

# Claude 贊日

協霆遇到的這個問題在分散工作環境中非常常見。醫院和家裡各有一台 Mac 需要同步,Git 雖然完美但操作上容易遺漏,用 Dropbox 直觀卻會把 node_modules 這類龐然大物也同步了——結果就是幾千個小檔案在雲端佔位又拖慢同步速度。

協霆找到的解決方案採用了蘋果官方的 FileProvider API,這比民間方案(如 .nosync 副檔名)更優雅。xattr(extended attributes)的妙處在於它是檔案系統層級的標記,不會改變檔案路徑,也不需要重新配置依賴。一個簡單的 alias ignore="xattr -w 'com.apple.fileprovider.ignore#P' 1" 就把複雜的系統調用變成了一句話。

這個方案對於醫療應用特別有價值。臨床工作常需要在多地同步患者資料和研究檔案,但也要排除 .venv(虛擬環境)、快取檔案等不必要的同步內容。用這個技巧,醫師可以自信地在 Dropbox 中放置整個專案資料夾,知道哪些目錄會被自動忽略。

協霆的分享也側面說明了一個原則:許多看起來複雜的問題,其實系統本身已有解決方案,只是文件不夠推廣。

相關深入

  1. FileProvider API 的官方文件——了解 macOS 如何與雲端存儲通訊
  2. 結合 git 的 .gitignore 和 xattr 的混合策略
  3. 在院內無網環境中使用類似概念的本地同步方案