'find' с '-o' и '-exec chown' работает не так, как ожидалось

Я пытаюсь запустить следующее:

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

Но после запуска команды он не изменяет права собственности на какие-либо файлы. Если я запускаю без -exec, он создает список всех файлов, которые, как я ожидаю, будет правильно изменен.

  • Как я могу оптимизировать эту команду Unix?
  • Список файлов в подкаталогах
  • Вывод двойных кавычек для переменных в bash и qmake
  • Перемещение последних файлов из одного каталога в другой
  • find -exec mv останавливается после первого запуска
  • Файлы размером более 1 ГБ и старше 6 месяцев
  • Если я использую:

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

    Файлы обновляются, как ожидалось. Я вижу на странице man:

     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 (Final)

  • Найти / ls кеширование
  • Разница между точкой и звездочкой в ​​команде find
  • Найдите файл хранилища ключей, содержащий конкретный SHA-1
  • Есть ли команда для перечисления файлов, исключение подкаталогов и отображение размера и даты?
  • Найти: Ссылка на текущий каталог
  • Используйте find, чтобы найти определенный каталог и удалить все файлы, кроме одного каталога
  • One Solution collect form web for “'find' с '-o' и '-exec chown' работает не так, как ожидалось”

    Логические операторы в синтаксисе find имеют более низкий приоритет и в вашем примере -o делит -user user_name и -group user_group -exec chown root. {} \; -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. {} \; 
    Linux и Unix - лучшая ОС в мире.