A file may not be executable in fact even it is has the relevant “execute” bit set in its permissions. This can be because the whole volume is mounted noexec (which, e.g., is implied by user option in fstab) or perhaps because of finer grained permission using ACLs.

After spending too much time today looking at the execute bits the take away is, check if individual file is actually executable by:

text -x filename && echo "Executable"

This will use the access system call:

strace test -x  filename && echo "Executable"

....
access("executable", X_OK)              = 0
....

to verify that the file can be executed by the current user. For searching many files use find . -type f -executable