簡體   English   中英

使用 ls 和 grep 查找可執行文件

[英]Finding executable files using ls and grep

我必須編寫一個腳本來查找目錄中的所有可執行文件。 所以我嘗試了幾種方法來實現它,它們確實有效。 但我想知道是否有更好的方法來做到這一點。

所以這是我的第一種方法:

ls -Fla | grep \*$

這工作正常,因為 -F 標志為我完成工作並向每個可執行文件添加一個星號,但假設我不喜歡星號。

所以這是第二種方法:

ls -la | grep -E ^-.{2}x 

這也很好用,我想要一個破折號作為第一個字符,然后我對接下來的兩個字符不感興趣,第四個字符必須是 x。

但是要求有點含糊,因為我不知道我是否必須檢查用戶、組或其他可執行權限。 所以這會起作用:

ls -la | grep -E ^-.{2}x\|^-.{5}x\|^-.{8}x

所以我正在測試第四個、第七個和第十個字符是 x。

現在我真正的問題是,是否有更好的解決方案使用 ls 和 grep 與正則表達式說:

我只想 grep 那些文件,在ls -la生成的行的前十個字符中至少有一個 x

你需要使用ls嗎? 您可以使用 find 來做同樣的事情:

find . -maxdepth 1 -perm -111 -type f

將返回當前目錄中的所有可執行文件。 刪除 -maxdepth 標志以遍歷所有子目錄。

您可以嘗試這種可怕的方法,但它可能會匹配包含看起來像權限的字符串的文件。

ls -lsa | grep -E "[d\-](([rw\-]{2})x){1,3}"

如果您絕對必須使用 ls 和 grep,則此方法有效:

ls -Fla | grep '^\S*x\S*'

它匹配第一個單詞(非空格)包含至少一個“x”的行。

Find 是一個完美的工具。 這將查找所有可執行文件(-type f):

find . -type f -executable

如果您不希望它遞歸列出所有可執行文件,請使用 maxdepth:

find . -maxdepth 1 -type f -executable

也許用test -x?

for f in $(\ls) ; do test -x $f && echo $f ; done

ls 上的 \\ 將繞過 shell 別名。

for i in `ls -l | awk '{ if ( $1 ~ /x/ ) {print $NF}}'`; do echo `pwd`/$i; done

這給出了可執行文件的絕對路徑。

雖然這個問題很老而且很久以前就已經回答過了,但我想為使用fd實用程序的任何人添加版本(我個人強烈推薦,如果您願意,請參閱https://github.com/sharkdp/fd想嘗試),您會得到與find . -type f -executable相同的結果find . -type f -executable find . -type f -executable通過運行:

fd -tx

要么

fd --type executable

還可以添加-d--max-depth參數,與原始find相同。

也許有人會發現這很有用。

file * |grep "ELF 32-bit LSB executable"|awk '{print $1}'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM