如何使用 ls 获取 bash 中的可执行文件的名称

How to get the name of the executables files in bash with ls

我尝试使用 ls -l 获取可执行文件的名称。 然后我尝试使用 grep -w x 获取带有 x 的 ls -l 行,但结果不正确:缺少一些可执行文件(.sh)。

我只需要可执行文件的名称而不是路径,但我不知道如何...

    user@user-K53TA:~/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

 user@user-K53TA:~/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

Don't parse ls。这可以通过 find.

来完成
find . -type f -perm /a+x

这会找到设置了任何可执行位的文件:用户、组或其他。

改用查找:

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

可以使用带有 glob 扩展的 for 循环来发现和操作文件名。观察:

#!/bin/sh 

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

由于接受的答案根本没有使用 ls

ls -l | grep -e '^...x'