Это найдет все файлы (не символические ссылки) с установленным исполняемым битом:
find .-perm +111-type f
Это также найдет символические ссылки (которые часто одинаково важны)
find .-perm +111-type f -or-type l
Вот как работает команда, если она не очевидна:
find очевидно, программа поиска (:
.ссылается на каталог, в котором нужно начать поиск ( .= текущий каталог)
-perm +111= с любым из установленных исполняемых битов ( +означает «любой из этих битов», 111является восьмеричным для исполняемого бита для владельца, группы и любого другого)
-type fозначает, что тип является файлом
-or логическое ИЛИ
-type lозначает, что тип является символической ссылкой
Вы можете использовать -Lвместо того, -or -type lчтобы любые statвызовы findвозвращали статистику файла, на который ссылается, а не саму ссылку.
Ян С.
Проблема, которую я обнаружил при таком подходе, заключается в том, что любой файл может иметь разрешение на запуск. Например, после загрузки какого-либо текстового файла из Windows разрешение нарушается.
Иван З. Сяо
5
Я не смог заставить работать ответ Яна (10.6.8), но следующее дало ожидаемые результаты:
find .-type f -perm +0111-print
редактировать обновление
Кажется, это тоже работает!
find .-type f -perm +ugo+x -print
Я предполагаю, что "x" не имеет смысла без спецификаторов user / group / other.
Символьный синтаксис должен быть новым - спасибо за указание на это. Я обновил свой ответ, чтобы он использовал восьмеричные числа и был обратно совместим со старыми версиями OS X.
Ян С.
Как ни странно, этот раздел man-страницы 10.6 в точности совпадает с тем, что вы цитировали… этого было достаточно, чтобы заставить меня копнуть немного глубже и посмотреть, что, черт возьми, происходит. Изменен мой ответ выше.
-perm [-|+]mode
The mode may be either symbolic (see chmod(1))or an octal number.If the mode is symbolic, a
starting value of zero is assumed and the mode sets or clears permissions without regard to the
process' file mode creation mask. If the mode is octal, only bits 07777 (S_ISUID | S_ISGID |
S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) of the file's mode bits participate in the comparison.If the mode is preceded by a dash (``-''),this primary evaluates to trueif at least all of
the bits in the mode are setin the file's mode bits. If the mode is preceded by a plus
(``+''), this primary evaluates to true if any of the bits in the mode are set in the file's
mode bits.Otherwise,this primary evaluates to trueif the bits in the mode exactly match the
file's mode bits. Note, the first character of a symbolic mode may not be a dash (``-'').
Итак, вам нужно:
find .-type f -perm +0111-print
Помните, что OS X основана на BSD , а не на Linux, поэтому команды Gnu, к которым вы привыкли в дистрибутивах Linux ( findодним из них), не обязательно совпадают с тем, что есть в OS X. Это не так разница в оболочке, это разница между утилитами операционной системы и операционной системы.
Я знаю очень старый вопрос, но в поисках решения я, возможно, нашел лучший ответ.
Основная проблема с использованием «find» заключается в том, что он опирается на атрибут, установленный на исполняемый файл, даже если этот атрибут установлен для неисполняемого файла.
MacOS поставляется с небольшим удобным инструментом командной строки " file", который отображает информацию о файле, например:
$> file *Distribution: directory
SomeFile.icns:Mac OS X icon,3272878 bytes,"ic09" type
MyPicture.png: PNG image data,1024 x 1024,8-bit/color RGBA, non-interlaced
NSHelpers.pas:Algol68 source text, ASCII text
myProgram:Mach-O 64-bit executable x86_64
Как вы можете видеть, MyProgram - это исполняемый файл, который хорошо обозначен как таковой. Поскольку в старых 32-битных исполняемых файлах также будет присутствовать фраза «исполняемый файл», следующее должно перечислить все истинные исполняемые файлы (двоичные файлы):
file *| grep "executable"
Надеюсь, что это будет полезно для тех, кто ищет ответ на тот же вопрос.
Примечание: fileпохоже, нет функции для просмотра через подкаталоги.
-L
вместо того,-or -type l
чтобы любыеstat
вызовыfind
возвращали статистику файла, на который ссылается, а не саму ссылку.Я не смог заставить работать ответ Яна (10.6.8), но следующее дало ожидаемые результаты:
редактировать обновление
Кажется, это тоже работает!
Я предполагаю, что "x" не имеет смысла без спецификаторов user / group / other.
источник
Со страницы руководства для поиска в OS X :
Итак, вам нужно:
Помните, что OS X основана на BSD , а не на Linux, поэтому команды Gnu, к которым вы привыкли в дистрибутивах Linux (
find
одним из них), не обязательно совпадают с тем, что есть в OS X. Это не так разница в оболочке, это разница между утилитами операционной системы и операционной системы.источник
Я знаю очень старый вопрос, но в поисках решения я, возможно, нашел лучший ответ.
Основная проблема с использованием «find» заключается в том, что он опирается на атрибут, установленный на исполняемый файл, даже если этот атрибут установлен для неисполняемого файла.
MacOS поставляется с небольшим удобным инструментом командной строки "
file
", который отображает информацию о файле, например:Как вы можете видеть, MyProgram - это исполняемый файл, который хорошо обозначен как таковой. Поскольку в старых 32-битных исполняемых файлах также будет присутствовать фраза «исполняемый файл», следующее должно перечислить все истинные исполняемые файлы (двоичные файлы):
Надеюсь, что это будет полезно для тех, кто ищет ответ на тот же вопрос.
Примечание:
file
похоже, нет функции для просмотра через подкаталоги.источник