'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. {} \; 

Файлы обновляются, как ожидалось. Я вижу на странице 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)

  • Использование chown $ USER: $ USER внутри сценария bash
  • Я хочу изменить разрешения для всех папок / файлов, исключая некоторые из них
  • Solaris - Наследование файлами права собственности пользователя на каталог
  • Как скрыть чужие каталоги от пользователя?
  • Изменить владельца собственного каталога
  • Почему вы должны быть членом группы, чтобы сделать эту группу владельцем группы вашего файла?
  • Использование kornshell или Perl для обхода разрешений, необходимых для root
  • Постоянное изменение разрешений / var / run / postgresql
  • 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 - лучшая ОС в мире.