[華語, cmn-Hant-TW]
在 /usr/local 裡面除了 pkg 安裝的檔案外,往往還會夾雜一些有的沒的東西,如果是自己放進去不礙事的還好,那些用 ports 安裝到一半壞掉或是刪除時沒清乾淨的檔案就麻煩了,散落各地不說,有時候甚至會造成編 ports 或是執行不正常,剛好這次把一台老機器從 FreeBSD-8 升到 FreeBSD-10,然後重編套件一直吃奇怪的錯誤訊息,又不想把 /usr/local 砍掉重練,就來研究一下怎麼找出這些 pkg 管不到的檔案,試了一下這樣就可以了: (以 pkgng 為例)
# find /usr/local -type f \! -path "/usr/local/etc/*" \! -path "/usr/local/www/*" -exec pkg which {} \; | grep "was not found in the database" |
一行就可以搞定,基本上就是用 find 去找 /usr/local 下面,然後排除通常會放自己東西的 /usr/local/etc 跟 /usr/local/www (還要排除哪些目錄可以自己調整),接著一個檔案一個檔案餵給 pkg which 去找,接著 pkg which 找不到時會吐 not found 訊息,所以用 grep 把有這個訊息的通通列出來。接下來就看要一一判斷還是再多寫幾行 script 自動處理了。