繁体   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