我正在運行 macOS Big Sur 并想使用“查找”終端命令在我的啟動卷上搜索檔案名。問題是啟動卷包含一個名為“卷”的檔案夾,其中列出了所有已安裝的卷。當我想將搜索限制在啟動卷時,這會導致“查找”搜索所有已安裝的磁盤。如何構建一個終端命令,將操作限制在一個已安裝的卷上?
uj5u.com熱心網友回復:
對于掛載在 /Volumes 下的卷,很簡單:使用find -x. 根據手冊頁:
-x防止 find 下降到設備號不同于下降開始的檔案的設備號的目錄中。
但它比這更復雜,因為從 macOS Catalina (v10.15) 開始,看似系統卷實際上是兩個不同卷的合成,一個包含不可變核心 OS 檔案的系統卷(以只讀方式安裝)和一個“資料”卷包含所有用戶資料、組態檔、添加的軟體等。檔案系統根目錄是系統卷,資料卷掛載在 /System/Library/Volumes/Data,“firmlinks”用于制作部分資料卷出現在檔案系統的相關位置(例如 /Users 與 /System/Library/Volumes/Data/Users 牢固鏈接)。在這里和這里有更多關于 Ask Different 的資訊,這里還有 Eclectic Light Company 的詳細地圖。
使這變得棘手的部分原因是系統和資料卷具有相同的設備號,因此find -x將它們視為相同的卷,并且會在不注意的情況下從一個卷交叉到另一個卷(包括以下韌體鏈接)。例如,如果您搜索主檔案夾中的內容,您可能會在 /Users/yourname 和 /System/Volumes/Data/Users/yourname 下找到相同的檔案。根據您的需要,您可能需要排除 /System/Volumes/Data 以避免這些重復的結果。我認為您幾乎總是可以通過在正常搜索前加上前綴來排除它-path /System/Volumes/Data -prune -false -o(除非您正在進行深度優先搜索)。例如,要在整個系統中搜索“myfile.txt”而不出現重復結果,您可以使用:
sudo find -x / -path /System/Volumes/Data -prune -false -o -name myfile.txt
(正如我所說,我認為除了深度優先搜索之外,這幾乎總是有效的,但我可能是錯的——在你相信它之前先測驗它。)
如果您想阻止find關注固定鏈接……那就更難了。我認為您必須決議 /usr/share/firmlinks 中的固定鏈接串列,并從中生成一個修剪串列。
似乎還有一個錯誤find,它會在資料卷(!)下找到部分系統卷。這是一個示例,顯示了與檔案的虛假第二次匹配:
$ find -x / -name BridgeVersion.bin 2>/dev/null
/System/Library/CoreServices/BridgeVersion.bin
/System/Volumes/Data/System/Library/CoreServices/BridgeVersion.bin
$ ls /System/Volumes/Data/System/Library/CoreServices/BridgeVersion.bin
ls: /System/Volumes/Data/System/Library/CoreServices/BridgeVersion.bin: No such file or directory
我真的不知道該怎么處理這個。
順便說一句,您可能會遇到的另一件事是透明、同意和控制 (TCC) 隱私系統(請參見此處)和系統完整性保護(SIP,請參見此處)限制對檔案系統許多部分的訪問(獨立于正常檔案權限)和 root 訪問權限),因此您可能需要授予對find正在運行的任何應用程式的訪問權限,或者關閉 SIP,或者只是忽略很多權限錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/419024.html
標籤:
