我必须编写一个脚本来查找目录中的所有可执行文件。因此,我尝试了几种实现它的方法,它们实际上起作用了。但是我想知道是否有更好的方法。
所以这是我的第一种方法:
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这些文件,在由…产生的一行的前十个字符中至少有一个x ls -la
ls -la
您需要使用ls吗?您可以使用find执行相同的操作:
find . -maxdepth 1 -perm -111 -type f
将返回当前目录中的所有可执行文件。删除-maxdepth标志以遍历所有子目录。
您可以尝试这种可怕的做法,但它可能会匹配包含看起来像权限的字符串的文件。
ls -lsa | grep -E "[d\-](([rw\-]{2})x){1,3}"