как я могу найти только исполняемые файлы в определенной директории в linux?

<p>как я могу найти только исполняемые файлы в определенной директории в linux?</p>

<p>проверить наличие исполняемых файлов можно с помощью <code>-perm</code> (не рекомендуется) или <code>-executable</code> (рекомендуется, так как это учитывает acl). чтобы использовать параметр <code>-executable</code>:</p><pre><code>find <dir> -executable </code></pre><p>если вы хотите найти только исполняемые файлы, а не каталоги с возможностью поиска, объедините их с <code>-type f</code>:</p><pre><code>find <dir> -executable -type f </code></pre>

<p>используйте параметр поиска <code>-perm</code>. это найдет файлы в текущем каталоге, которые могут быть выполнены их владельцем, членами группы или другими:</p><pre><code>find . -perm /u=x,g=x,o=x </code></pre><p>правка:</p><p>я только что нашел другой вариант, который присутствует по крайней мере в gnu find 4.4.0:</p><pre><code>find . -executable </code></pre><p>это должно работать даже лучше, потому что списки acl также рассматриваются.</p>

<p>я знаю, что в этом вопросе конкретно упоминается linux, но, поскольку это первый результат в google, я просто хотел добавить ответ, который искал (например, если вы - как и я - в данный момент - вынуждены вашим работодателем использовать не gnu) система linux).</p><p>протестировано на<strong> macos </strong>10.12.5</p><pre><code>find . -perm +111 -type f </code></pre>

<p>у меня есть другой подход, в случае, если вы действительно хотите что-то сделать с исполняемыми файлами - и не обязательно фактически заставлять find фильтровать себя:</p><pre><code>for i in `find -type f`; do [ -x $i ] && echo "$i is executable"; done </code></pre><p>я предпочитаю это, потому что он не зависит от <code>-executable</code>, который зависит от платформы; и он не полагается на <code>-perm</code>, который является немного загадочным, немного специфичным для платформы, и, как написано выше, требует, чтобы файл был исполняемым для всех (не только для вас).</p><p><code>-type f</code> важен, потому что каталоги * nix должны быть исполняемыми, чтобы их можно было обойти, и чем больше запросов находится в команде <code>find</code>, тем более эффективной будет ваша команда.</p><p>во всяком случае, просто предлагая другой подход, поскольку * nix - это страна миллиардов подходов.</p>

<p>файл, помеченный как исполняемый, не обязательно должен быть исполняемым или загружаемым файлом или объектом.</p><p>вот что я использую:</p><pre><code>find ./ -type f -name "*" -not -name "*.o" -exec sh -c ' case "$(head -n 1 "$1")" in ?elf*) exit 0;; mz*) exit 0;; #!*/ocamlrun*)exit0;; esac exit 1 ' sh {} \; -print </code></pre>

<p>как поклонник одного лайнера ...</p><pre><code>find /usr/bin -executable -type f -print0 | xargs file | grep ascii </code></pre><p>использование 'xargs' для получения вывода команды find (использование print0 для обеспечения правильной обработки имен файлов с пробелами). теперь у нас есть список исполняемых файлов, и мы предоставляем их один за другим в качестве параметра команды file. затем используйте grep для термина ascii, чтобы игнорировать двоичные файлы. пожалуйста, замените -executable в команде find тем, какой стиль вы предпочитаете (см. предыдущие ответы) или что работает в вашей 'nix os</p><p>я требовал, чтобы выше было найти файлы с eval в сценариях, принадлежащих root, поэтому создал следующее, чтобы помочь найти слабые места для повышения привилегий, когда пользователь root запускает сценарии с небезопасными параметрами ...</p><pre><code>echo -n "+ identifying script files owned by root that execute and have an eval in them..." find / -not \( -path /proc -prune \) -type f -executable -user root -exec grep -l eval {} \; -exec file {} \; | grep ascii| cut -d ':' -f1 > $outputdir"/root\_owned\_scripts\_with\_eval.out" 2>/dev/null & </code></pre>