Поиск исполняемых файлов с использованием LS и GREP

StackOverflow https://stackoverflow.com/questions/7812324

  •  26-10-2019
  •  | 
  •  

Вопрос

Я должен написать сценарий, который находит все исполняемые файлы в каталоге. Поэтому я попробовал несколько способов его реализации, и они на самом деле работают. Но мне интересно, есть ли более приятный способ сделать это.

Так что это был мой первый подход:

ls -Fla | grep \*$

Это работает нормально, потому что флаг -F делает работу для меня и добавляет в каждый исполняемый файл звездочку, но, допустим, мне не нравится знак звездочки.

Так что это был второй подход:

ls -la | grep -E ^-.{2}x 

Это тоже работает нормально, я хочу, чтобы в качестве первого персонажа я хочу чертовски, тогда меня не интересует следующих двух символов, и четвертый персонаж должен быть X.

Но в требованиях есть небольшая двусмысленность, потому что я не знаю, должен ли мне проверить наличие пользователей, группы или другого исполняемого разрешения. Так что это сработало:

ls -la | grep -E ^-.{2}x\|^-.{5}x\|^-.{8}x

Так что я проверяю четвертого, седьмого и десятого персонажа как х.

Теперь мой реальный вопрос, есть ли лучшее решение с использованием LS и Grep с Regex, чтобы сказать:

Я хочу герметизировать только эти файлы, имея хотя бы один x в десяти первых символах линии, созданной ls -la

Это было полезно?

Решение

Вам нужно использовать LS? Вы можете использовать поиск, чтобы сделать то же самое:

find . -maxdepth 1 -perm -111 -type f

Вернут все исполняемые файлы в текущем каталоге. Удалите флаг -maxDepth, чтобы пройти все детские каталоги.

Вы можете попробовать эту ужасность, но она может соответствовать файлам, которые содержат строки, которые выглядят как разрешения.

ls -lsa | grep -E "[d\-](([rw\-]{2})x){1,3}"

Другие советы

Если вам абсолютно необходимо использовать LS и Grep, это работает:

ls -Fla | grep '^\S*x\S*'

Он соответствует строкам, в которых первое слово (не-белое пространство) содержит хотя бы один «x».

Найти идеальный инструмент для этого. Это находит все файлы (-type f), которые являются исполняемыми:

find . -type f -executable

Если вы не хотите, чтобы он повторно перечислил все исполняемые файлы, используйте MaxDepth:

find . -maxdepth 1 -type f -executable

Возможно с тестом -x?

for f in $(\ls) ; do test -x $f && echo $f ; done

On LS будет обойти псевдонимов оболочки.

for i in `ls -l | awk '{ if ( $1 ~ /x/ ) {print $NF}}'`; do echo `pwd`/$i; done

Это дает абсолютные пути исполняемым файлам.

file * |grep "ELF 32-bit LSB executable"|awk '{print $1}'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top