'find' com '-o' e '-exec chown' não funcionam como esperado [duplicado]

2

Estou tentando executar o seguinte:

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

Mas depois de executar o comando, isso não altera a propriedade de nenhum arquivo. Se eu correr sem o -exec, ele produz uma lista de todos os arquivos que eu espero que sejam modificados corretamente.

Se eu usar:

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

Os arquivos são atualizados conforme o esperado. Eu vejo na man page que:

expr1 -o expr2
          Or; expr2 is not evaluated if expr1 is true.


expr1 -or expr2
          Same as expr1 -o expr2, but not POSIX compliant.

No entanto, os arquivos são de propriedade de user_name:user_group . O primeiro caso deve ser avaliado como true e executar o comando exec, a menos que eu esteja entendendo mal alguma coisa aqui. Alguém pode explicar por que isso está funcionando dessa maneira?

Algumas informações do sistema, se necessário:

find (GNU findutils) 4.4.2 Lançamento do CentOS 6.8 (Final)

    
por Greg Miller 03.10.2016 / 08:05

1 resposta

2

Os operadores lógicos na sintaxe find têm menor precedência e, no seu exemplo, -o divide -user user_name e -group user_group -exec chown root. {} \; .

Verifique o seguinte:

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

Para evitar a duplicação, use parênteses para avaliar as duas expressões de teste:

find . \( -user user_name -o -group user_group \) -exec chown root. {} \;
    
por 03.10.2016 / 08:21

Tags