encontrar comando y expresión regular inversa

Estoy buscando una forma de expresar este comando que excluya todos los permisos ejecutables, excepto aquellos archivos que terminen en ".EXE".

He intentado resolverlo usando el comando "buscar" y -exec, por favor. Gracias.

El comando que probé, y otras versiones del mismo, no funciona:

find . -type f -regex "[^\.EXE$]" -printf "%f\n" -exec chmod a-x {} +

Gracias cualquier ayuda, Beco.


Editado:

Para encontrar un "inverso" de una expresión regular, probé después de (más) investigación:

find . -type f ! -regex ".EXE$" -printf "%f\n" -exec chmod a-x {} +

Pero esto tampoco funcionó.

preguntado el 03 de mayo de 12 a las 19:05

Si desea utilizar el predicado -regex, no el predicado -name, debe especificar una expresión regular que coincida con el nombre completo: -regex ".*\.EXE$" -

2 Respuestas

Hay pocas cosas que se pueden arreglar con tu mando.

Primero la condición de exclusión. Para excluir "*.EXE", diga ! -name "*.EXE". La condición en el OP toma todos los archivos que contienen una letra diferente de \,., E or X.

La otra cosa es que, para este propósito específico, tiene sentido verificar solo los archivos ejecutables. Esto se puede lograr con el -executable predicado.

El resto parece estar bien.

Aquí hay una versión completa

 find -executable -type f ! -name "*.EXE"  -exec chmod a-x {} +

contestado el 03 de mayo de 12 a las 19:05

if find . -name "*.EXE" -exec chmod a-x {} + no funciona, entonces simplemente "busco . -nombre .. -imprimir" en una secuencia de comandos y edito la secuencia de comandos.

contestado el 03 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.