Как я могу найти только исполняемые файлы в определенной директории в Linux?
linux
command-line
bash
find
ХайЮань Чжан
источник
источник
file
команды ?ls -l | egrep '^[^d]..x..x..x.*$'
выше приведен список всех исполняемых файлов (для всех / пользователя и группы) в текущем каталоге. Примечание . Этот-executable
параметр не работает на Mac, поэтому возможен обходной путь, описанный выше.-rwxr-x---
), который по-прежнему исполняем для некоторых пользователей.Ответы:
Проверка наличия исполняемых файлов может быть выполнена с
-perm
(не рекомендуется) или-executable
(рекомендуется, так как это учитывает ACL). Чтобы использовать-executable
опцию:если вы хотите найти только исполняемые файлы, а не каталоги с возможностью поиска, объедините их с
-type f
:источник
-type x
.find: invalid predicate -executable'
на RHELИспользуйте
-perm
опцию поиска . Это найдет файлы в текущем каталоге, которые могут быть выполнены их владельцем, членами группы или другими:Редактировать:
Я просто нашел другой вариант, который присутствует по крайней мере в GNU find 4.4.0:
Это должно работать даже лучше, потому что списки ACL также рассматриваются.
источник
find: invalid mode
/ и = х, г = х, о = x'`-perm /111
может быть самая портативная версия.Я знаю, что в этом вопросе конкретно упоминается Linux, но, поскольку это первый результат в Google, я просто хотел добавить ответ, который искал (например, если вы - как и я - в данный момент - вынуждены вашим работодателем использовать не GNU) Система Linux).
Протестировано на macOS 10.12.5
источник
У меня есть другой подход, в случае, если вы действительно хотите что-то сделать с исполняемыми файлами - и не обязательно фактически заставлять find фильтровать себя:
Я предпочитаю это, потому что это не зависит от
-executable
конкретной платформы; и он не полагается на то,-perm
что является немного загадочным, немного специфичным для платформы, и, как написано выше, требует, чтобы файл был исполняемым для всех (не только для вас).Это
-type f
важно, потому что каталоги * nix должны быть исполняемыми, чтобы их можно было обойти, и чем больше в команде запросовfind
, тем эффективнее будет ваша команда.Во всяком случае, просто предлагая другой подход, поскольку * nix - это страна миллиардов подходов.
источник
find -perm
, находит файлы , которые имеют любое разрешение на выполнение бит. (2) Напротив, этот ответ находит только файлы, для которых текущий пользователь имеет разрешение на выполнение. Конечно, это может быть тем, чего хочет ОП, но неясно. … (Продолжение)`…`
на…$(…)
увидеть это , это и это . (4) Но не делайfor i in $(find …); do …
; это терпит неудачу на именах файлов, которые содержат пробел (ы). Вместо этого делайfind … -exec …
. (5) И, когда вы работаете с переменными оболочки, всегда заключайте их в кавычки (в двойных кавычках), если у вас нет веских причин не делать этого, и вы уверены, что знаете, что делаете.-perm
аргумент как требующий все три, а не один из них. Кроме того, спасибо за вклад в защиту аргументов оболочки, это все, о чем я не знал.for i in
найти. -тип f; do [ -x $i ] && echo "$i is executable"; done
; вам не хватает части <dir>, которую я использую точку (.)Файл, помеченный как исполняемый, не обязательно должен быть исполняемым или загружаемым файлом или объектом.
Вот что я использую:
источник
-name "*"
это никак не влияетfind
- он обычно находит все файлы, которые не были удалены тестами.Как поклонник одного лайнера ...
Использование 'xargs' для получения вывода команды find (использование print0 для обеспечения правильной обработки имен файлов с пробелами). Теперь у нас есть список исполняемых файлов, и мы предоставляем их один за другим в качестве параметра команды file. Затем grep для термина ASCII, чтобы игнорировать двоичные файлы. Пожалуйста, замените -executable в команде find тем, какой стиль вы предпочитаете (см. Предыдущие ответы) или что работает в вашей 'NIX OS
Я требовал, чтобы выше было найти файлы с eval в сценариях, принадлежащих root, поэтому создал следующее, чтобы помочь найти слабые места для повышения привилегий, когда пользователь root запускает сценарии с небезопасными параметрами ...
источник
file
сообщает кодировку, поэтому сценарий Python может быть сообщен какa /usr/bin/python script, UTF-8 Unicode text executable
.find ... | xargs file -b | grep -v '^ELF'
может работать лучше, чтобы обнаружить недвоичные файлы.~/.bashrc
Сегодня вечером я создал функцию для поиска исполняемых файлов не по системному пути и не по каталогам:Преимущество состоит в том, что он будет искать три дистрибутива Linux и установку Windows менее чем за секунду, где
find
команда занимает 15 минут.Например:
Или для всего каталога и всех его подпрограмм:
источник