使用 rsync 複製時忽略 windows 隱藏文件
我需要在 Windows 機器和 Linux 機器之間保持同步一個非常大的目錄結構(幾百 GB)。我正在使用 rsync 進行複制,因為它會自動忽略未更改的文件,並且在複製更改的文件時更有效(僅複製差異)。
我遇到的問題是,在 Windows 文件系統上執行的某些應用程序喜歡生成我不想複製的各種元數據文件。由於所有這些文件都使用 Windows 文件屬性隱藏,我認為簡單地指示 rsync 忽略這些文件會非常有幫助。但是 rsync 手冊頁不提供任何此類選項。
目前我使用 SMB 掛載 Windows 文件系統。當我使用控制台列出目錄中的文件(使用
ls -l
)時,它會列出所有文件,包括隱藏文件,但是當我使用 nautilus 列出文件時,它會辨識出一些是隱藏文件,並且只有在啟用時才會顯示給我“顯示隱藏文件”。所以我不確定 rsync 是否甚至可以看到 Windows 文件是隱藏的。任何建議都會非常有幫助。
要將 DOS 屬性導入 Linux,您需要編輯 smb.conf 文件。
有兩種不同的方法可以導入 Windows 屬性。
第一個選項是設置
map hidden = yes
,這意味著 Windows 上的隱藏文件將在 Linux 上設置全域執行位。為此,您還必須至少001
在您的create mask
.另一個選項是設置
store dos attributes = yes
,這意味著 Windows 屬性將儲存在 Linux 文件系統中名為 user.DOSATTRIB 的擴展屬性中。
rsync
無法根據普通屬性或擴展屬性過濾文件,但它可以排除您以其他方式準備的文件列表。您可以使用該find
命令根據 Unix 屬性創建此列表。我擁有的版本find
似乎不支持擴展屬性,但仍然可以使用該-exec
選項find
來獲取所有文件的擴展屬性並對其進行過濾。由於
find
可以過濾正常的 Unix 權限,如果您選擇了世界執行位選項,那麼find . -perm -001
將在您安裝的 Windows 文件系統中找到所有隱藏文件。您可以將此列表放在一個文件中,然後用於rsync --exclude-from=FILE
從 rsync 中排除這些文件。