![](/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.