如何使用LS

问题描述:

我尝试使用ls -l命令来获取可执行文件的名称得到可执行文件的名字在bash。 然后我试图让LS的线-l具有用grep -w X,但结果是不正确的一个X:一些可执行文件丢失(在.SH)。如何使用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

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 
+0

注意'-maxdepth'和'-executable'是非标准扩展(使用GNU'find',但不由POSIX指定)。另请注意,'-executable'可能与'-perm/a + x'有所不同...... –

可以使用一个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