Find
使用“-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
. 第一種情況應該評估為真並執行 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. {} \;