Найти все исполняемые файлы в папке в терминале

У меня есть папка myfolder, которая содержит огромную иерархию файлов /папок.
Как найти все исполняемые файлы в этой папке?

В Ubuntu это работает: find . -executable -type f

Но Mac OS X Mavericks (который также использует bash) не получает его:

find: -executable: unknown primary or operator
13 голосов | спросил Nicolas Raoul 8 Jam1000000amWed, 08 Jan 2014 09:15:39 +040014 2014, 09:15:39

3 ответа


20

Здесь будут найдены все файлы (а не символические ссылки) с установленным битом:

find . -perm +111 -type f

Это будет также найти символические ссылки (которые не менее важны)

find . -perm +111 -type f -or -type l

Вот как работает команда, если она не очевидна:

  • find, очевидно, программа поиска (:
  • . ссылается на каталог, который нужно найти (. = текущий каталог)
  • -perm +111 = с любым из исполняемых битов (+ означает «любой из этих битов», 111 является восьмеричным для исполняемого бита для владельца, группы и любого другого)
  • -type f означает, что тип является файлом
  • -or boolean OR
  • -type l означает, что тип является символической ссылкой
ответил drfrogsplat 8 Jam1000000amWed, 08 Jan 2014 10:01:30 +040014 2014, 10:01:30
5

Я не мог заставить работу Иана ответить (10.6.8), но следующие дали ожидаемые результаты:

find . -type f -perm +0111 -print

изменить обновление

Это тоже работает!

find . -type f -perm +ugo+x -print

Я думаю, что «x» бессмысленно без спецификаций user /group /other.

ответил Kent 8 Jam1000000amWed, 08 Jan 2014 09:59:22 +040014 2014, 09:59:22
4

Из справочной страницы для поиска в OS X :

 -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 true if at least all of
         the bits in the mode are set in 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 true if 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. Это не разница в оболочке, это разница в утилите операционной системы /операционной системы.

ответил Ian C. 8 Jam1000000amWed, 08 Jan 2014 09:49:56 +040014 2014, 09:49:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132