¿Cómo puedo usar dos comandos bash en -exec del comando find?

Pregunta:

¿Es posible usar 2 comandos en la parte -exec del comando de find ?

Probé algo como:

find . -name "*" -exec  chgrp -v new_group {}  ; chmod -v 770 {}  \;

y obtengo:

encontrar: argumento faltante para -exec
chmod: no se puede acceder {}: no existe tal archivo o directorio
chmod: no se puede acceder;: no existe tal archivo o directorio

Respuesta:

En cuanto al comando de find , también puede agregar más comandos -exec en una fila:

find . -name "*" -exec chgrp -v new_group '{}' \; -exec chmod -v 770 '{}' \;

Tenga en cuenta que este comando es, en su resultado, equivalente a usar

chgrp -v archivo nuevo_grupo && chmod -v archivo 770

en cada archivo.

Todas las find parámetros 's como -name , -exec , -size y así sucesivamente, son en realidad pruebas: find continuará funcionando uno por uno, siempre y cuando toda la cadena hasta el momento ha evaluado como true. Por lo tanto, cada comando -exec consecutivo se ejecuta solo si los anteriores devolvieron verdadero (es decir, el estado de salida 0 de los comandos). Pero find también comprende operadores lógicos como o ( -o ) y no ( ! ). Por lo tanto, para usar una cadena de pruebas -exec independientemente de los resultados anteriores, se necesitaría usar algo como esto:

find . -name "*" \( -exec chgrp -v new_group {} \; -o -true \) -exec chmod -v 770 {} \; 

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım