2015-10-06 2 views
0

Я пытаюсь получить имя исполняемых файлов с помощью ls -l. Затем я попытался получить строки ls -l, которые имеют x, используя grep -w x, но результат не прав: некоторые исполняемые файлы отсутствуют (.sh).Как получить имя исполняемых файлов в bash с помощью ls

мне просто нужно имя исполняемых файлов не путь, но я не знаю, как ...

[email protected]:~/Bureau$ ls -l 
total 52 
-rwxrwxrwx 1 user user 64 oct. 6 21:07 a.sh 
-rw-rw-r-- 1 user user 11 sept. 29 21:51 e.txt 
-rwxrwxrwx 1 user user 140 sept. 29 23:42 hi.sh 
drwxrwxr-x 8 user user 4096 juil. 30 20:47 nerdtree-master 
-rw-rw-r-- 1 user user 492 oct. 6 21:07 okk.txt 
-rw-rw-r-- 1 user user 1543 oct. 6 21:07 ok.txt 
-rw-rw-r-- 1 user user 119 sept. 29 23:27 oo.txt 
-rwxrwxr-x 1 user user 8672 sept. 29 21:20 prog 
-rw-rw-rw- 1 user user 405 sept. 29 21:23 prog.c 
-rw-rw-r-- 1 user user 0 sept. 29 21:58 rev 
drwxrwxr-x 3 user user 4096 sept. 29 20:51 sublime 

[email protected]:~/Bureau$ ls -l | grep -w x 
drwxrwxr-x 8 user user 4096 juil. 30 20:47 nerdtree-master 
-rwxrwxr-x 1 user user 8672 sept. 29 21:20 prog 
drwxrwxr-x 3 user user 4096 sept. 29 20:51 sublime 
+0

использует 'ls' обязательный? [Не разбирайте 'ls'] (http://mywiki.wooledge.org/ParsingLs) –

+0

нет, но я не знаю другого способа – Lown

ответ

4

Don't parse ls. Это можно сделать с помощью find.

find . -type f -perm /a+x 

Это находит файлы с любым из исполняемых битов: пользователем, группой или другим.

2

Используйте поиск вместо:

find -executable 
find -maxdepth 1 -type f -executable 
find -maxdepth 1 -type f -executable -ls 
+0

Обратите внимание, что' -maxdepth' и '-executable' являются нестандартными расширениями (работать с GNU 'find', но не указан POSIX). Также обратите внимание, что '-executable' может отличаться от' -perm/a + x' ... –

1

Можно использовать for цикл с расширением Глоб для обнаружения и обработки имен файлов. Обратите внимание:

#!/bin/sh 

for i in * 
do # Only print discoveries that are executable files 
    [ -f "$i" -a -x "$i" ] && printf "%s\n" "$i" 
done 
+0

Хорошо работать благодаря! – Lown