regexfindexecinverse

find command and inverse regex


I've looking for a way to express this command that excludes all executable perms except for those files ended in ".EXE"

I've trying to solve it using the "find" command and -exec, please. Thanks.

The command I tryed, and other versions of the same, does not work:

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

Thanks any help, Beco.


Edited:

To find a "inverse" of a regular expression, I tried after (more) research:

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

But this also did not work.


Solution

  • There are few things that can be fixed with your command

    First the exclusion condition. To exclude "*.EXE" say ! -name "*.EXE". The condition in the OP takes all files that contain a letter different from \,., E or X.

    The other thing is that for this specific purpose it makes sense to check only executable files. This can be accomplished with the -executable predicate.

    The rest of it seems ok.

    Here is a complete version

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