2015-10-06 49 views
0

我嘗試使用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

回答

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