我最近在新的 SSD 上全新安裝了 Windows 10,並將舊資料檔案還原到磁碟機上。問題是,儘管我告訴備份程式不要恢復權限,但它們最終還是搞砸了。
我已經執行了takeown /f c:\src /r /d Y
我嘗試進入資源管理器的屬性 - >安全性,將具有“完全控制”權限的用戶添加到該資料夾,並將其應用到子級。 Windows 運行了半個小時,據說是這樣做的,但屬性:「只讀」仍然填滿了一個正方形。
我清除了「只讀」方塊,遞歸應用它,Windows 又運行了 15-20 分鐘......並且 fscking 方塊仍然被填滿。
我想我需要使用 ICACLS...但我害怕在沒有指導的情況下使用。事實上,每次我過去使用 ICACLS 來嘗試解決這樣的情況時,最終都會使問題變得更糟。我很好地理解 Unix 風格的權限和所有權,但是每次我犯下與 NTFS 權限糾纏在一起的錯誤時,NTFS 權限都會讓我感到很沮喪。
過去,我使用傳統的解決方法透過強力解決此問題:啟動 Linux,遞歸地將目錄(保存時間戳記)複製到 FAT32 卷,啟動回 Windows,從 NTFS 卷中刪除原始目錄,然後將其從FAT32 卷複製回來,並清除NTFS 權限。我現在不能這樣做...該目錄包含太多 4-gig+ 檔案。
那麼...我要怎麼達成類似的目標(大概是用 ICACLS)?
解決方案:
根據下面的答案,這就是有效的方法。
icacls c:\src /reset /T /L /Q
takeown /f c:\src /r /d Y
(我在 icacls 之後重新運行了 takeown,以防萬一)
attrib -r -h -s c:\src /s /d
事實證明,根據這個答案,這只是 Windows 資源管理器 UI 設計極為糟糕的一個例子。簡而言之,Windows 永遠不會報告資料夾的內容是「非唯讀」。您可以使用該複選框嘗試清除或設定資料夾中包含的檔案的唯讀狀態,但該複選框的狀態本身並不能表明有關其當前狀態的任何有意義的資訊。
顯然,微軟的理由是每個資源管理器資料夾都包含一個隱藏的系統文件,從使用者的角度來看,該文件是唯讀的(如果該文件不存在,資源管理器會假裝存在)。因此,每個資料夾都至少包含一個只讀文件,即使使用者故意放在那裡的文件不是唯讀的。嘆。
不管怎樣,我的問題現在已經解決了。 Gradle 和 Android Studio 能夠建立文件,而不會因權限錯誤而死亡,因此重置 ACL、取得所有權並清除唯讀和系統標誌(如果它們存在的話)解決了問題。
答案1
「屬性:[✔] 只讀」本來就不是 NTFS 權限標誌。它是一組完全獨立的每個檔案標誌——通常稱為“MS-DOS 屬性”。 (比較Linux chattr。)
此屬性與「隱藏」、「系統」和「存檔」實際上源自 DOS FAT 檔案系統,因此您無法透過將檔案複製到 FAT32 磁碟區並傳回來刪除它們。
要遞歸地刪除它們,
您必須擁有這些檔案和資料夾的「寫入屬性」權限。
attrib -r -h -s c:\src /s /d
這些屬性可以在 Linux 上以 xattr 存取system.ntfs_attrib_be
,例如:
setfattr -n system.ntfs_attrib_be -h -v 0x00000020 <filename>