如何‘查找’所有具有0**權限的文件和資料夾?

如何‘查找’所有具有0**權限的文件和資料夾?

我遇到了一個奇怪的情況,我發現許多文件和資料夾的權限設定為 000。這很容易透過以下方式修復:

sudo find . -perm 000 -type f -exec chmod 664 {} \; 
sudo find . -perm 000 -type d -exec chmod 775 {} \;

不幸的是,我突然意識到問題有點複雜,有一些奇怪的權限,例如 044 和其他一些奇怪的設定。事實證明,這些都是散落的,不可預測的。

有沒有辦法搜尋 0** 等權限或其他此類非常有限的權限配置?

答案1

我會用這樣的東西:

find . ! -perm -u=r ! -perm -u=w ! -perm -u=x -ls

或者,如果您更喜歡八進位表示法:

find . ! -perm -400 ! -perm -200 ! -perm -100 -ls

不幸的是,不知道如何將其作為一種-perm選擇。

上面的語法是標準的,除了您可以在不支援獲得類似輸出的系統上-ls替換的部分(常見但不是 POSIX)之外。-exec ls -disl {} +find-ls

答案2

GNUfind,您可以透過尋找與「為擁有者設定的任何位元」不匹配的檔案來做到這一點:

find . ! -perm /700

同樣在例如自由BSDfind

find . ! -perm +700

兩者的工作方式相同。-perm /700-perm +700如果設定了任何擁有者權限位則符合;如果沒有設定任何擁有者權限位,則!否定該值,因此! -perm /700或符合。! -perm +700其他位將被忽略。

答案3

如果您使用sfind或任何程式使用libfind或 如果您使用BSD find,您可以使用:

find path -perm +0xxx

尋找設定了模式中提到的任何位元的文件,因此

find . ! -perm +0700

應該適合你的情況。順便一提:這也受到GNU find.

請注意,這是一個既沒有在 POSIX 中提到也沒有在基於 SVr4 的find.

相關內容