如何使用 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'
我尝试使用 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'