
我正在嘗試運行以下命令:
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_name
and -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. {} \;