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

时间:2015-10-06 19:31:16

标签: linux bash file terminal ls

我尝试使用ls -l获取可执行文件的名称。 然后我尝试使用grep -w 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

3 个答案:

答案 0 :(得分:4)

Don't parse ls。这可以使用find完成。

find . -type f -perm /a+x

这将查找具有任何可执行位设置的文件:user,group或other。

答案 1 :(得分:2)

使用find代替:

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

答案 2 :(得分:1)

可以使用带有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