Find

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

  • October 3, 2016

我正在嘗試執行以下內容:

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. 第一種情況應該評估為真並執行 exec 命令,除非我在這裡誤解了一些東西。有人可以解釋為什麼會這樣嗎?

如果需要一些系統資訊:

find (GNU findutils) 4.4.2 CentOS release 6.8 (Final)

語法中的邏輯運算符find具有較低的優先級,並且在您的範例中-o除以-user user_name-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. {} \;

引用自:https://unix.stackexchange.com/questions/313957