帶有“-o”和“-exec chown”的“查找”未按預期工作

帶有“-o”和“-exec chown”的“查找”未按預期工作

我正在嘗試運行以下命令:

find . -user user_name -o -group user_group -exec chown root. {} \;

但運行該命令後,它不會改變任何文件的所有權。如果我在沒有 -exec 的情況下運行,它會產生我希望正確修改的所有檔案的清單。

如果我使用:

find . -user user_name -exec chown root. {} \; find . -group user_group -exec chown root. {} \;

文件已如預期更新。我在手冊頁中看到:

expr1 -o expr2
          Or; expr2 is not evaluated if expr1 is true.


expr1 -or expr2
          Same as expr1 -o expr2, but not POSIX compliant.

但是,這些文件的所有者是user_name:user_group.第一種情況應該評估為 true 並執行 exec 命令,除非我在這裡誤解了某些內容。有人可以解釋為什麼會這樣嗎?

如果需要一些系統資訊:

find (GNU findutils) 4.4.2 CentOS 版本 6.8(最終版)

答案1

語法中的邏輯運算子的find優先順序較低,在您的範例中-o除以-user user_nameand -group user_group -exec chown root. {} \;

檢查以下內容:

find . -user user_name -exec chown root. {} \; -o -group user_group -exec chown root. {} \;

為了避免重複,請使用括號來一起計算兩個測試表達式:

find . \( -user user_name -o -group user_group \) -exec chown root. {} \;

相關內容