![](/img/trans.png)
[英]Linux - finding hidden files that are executable by the owner using ls or find command
[英]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.