按名称或 grep 查找

按名称或 grep 查找
find . -perm -u+x,g+x,o+x -type f -exec grep -i -l -H -E '#!/bin/bash|#!/bin/sh' {} \; 2>/dev/null 1>/$user_scripts

我的任务是找到 4 个文件夹中 N 个用户可能存在的任何脚本。我将使用 ssh 并执行上面的命令来生成文件列表以供以后使用。未找到某些文件扩展名为 .sh 和 .bash 且不包含 #!/bin/bash|#!/bin/sh 的脚本。

我需要对此进行改进,但我正在努力寻找可以在 Solaris 服务器中运行的东西,而我没有管理权限(没有特殊的软件/库)。如果可能的话,我希望不需要执行另一个脚本,该脚本不必要地出现在每个用户的每个列表中。

基本上我需要在同一行中使用某种“If(find or grep)”。这可能吗?

答案1

您可以通过对命令的不同部分进行“或”操作来完成此操作find。考虑将您的选择标准分为三个部分:所有文件的必要要求(权限等),然后是命名文件或具有适当标头的文件。

这可以这样表达find(为了便于阅读,这里分成多行):

find . -perm -u+x,g+x,o+x -type f \(
    -name '*.sh' -o
    -name '*.bash' -o
    -exec grep -il -E '^#!/bin/bash|^#!/bin/sh' {} \;
\) 2>/dev/null >/$user_scripts

相关内容