Вот способ исключить сценарии, то есть файлы, первые два символа которых #!
:
find -type f -executable -exec sh -c 'test "$(head -c 2 "$1")" != "#!"' sh {} \; -print
Для некоторых типов файлов неясно, хотите ли вы, чтобы они классифицировались как скрипты или двоичные файлы, например, файлы байт-кода. В зависимости от того, как все настроено, они могут начинаться или не начинаться #!
. Если это важно для вас, вам придется сделать скрипт внутренней оболочки более сложным. Например, вот как вы можете включить двоичные файлы ELF и исполняемые файлы Mono и программы байт-кода Objective Caml, но не другие виды исполняемых файлов, такие как сценарии оболочки или сценарии perl или программы байт-кода JVM:
find -type f -executable -exec sh -c '
case "$(head -n 1 "$1")" in
?ELF*) exit 0;;
MZ*) exit 0;;
#!*/ocamlrun*) exit 0;;
esac
exit 1
' sh {} \; -print