按目录中的所有文件名进行 Grep

按目录中的所有文件名进行 Grep

我想获取给定目录中正在运行的所有服务的进程状态。现在我可以逐个检查ps -ef | grep ServiceName。但是有没有办法获取ls目录和ps每个服务?

就像是ps -ef | grep < ls

答案1

已经将其作为评论发布,这应该可以满足您的要求:

ps -ef | grep "$(ls)"

答案2

在 Bash 中:

ps -ef | grep "$(ls)"

(当我在 Debian/Bash 中编写和测试我的其余答案时,同一行也出现在 incBrain 的评论中。)

如果模式ps作为命令行参数(而不是命令)或命令的一部分出现在输出中,则会产生垃圾。为了减少这种情况,我将使用find而不是ls获取完整路径:

ps -ef | grep -f <(find -L "$(pwd)" -maxdepth 1 -type f)

仍然可能存在一些不必要的额外输出。

请注意,这些不是

在给定目录中运行的服务

相当指定目录中具有可执行文件的进程

要了解进程的当前工作目录,您可以阅读/proc/<PID>/cwd。下一个示例是(快速而粗糙的)ps替代方法,它表明您可以从/proc所需的形式中提取信息:

sudo bash -c 'for i in /proc/[1-9]* ; do PID=$(basename "$i"); E=$(readlink "${i}/exe"); D=$(readlink "${i}/cwd"); echo -e "PID=${PID}\tEXE=${E}\tCWD=${D}" ; done | grep "CWD=$(pwd)$"'

您需要sudo获得所有进程的访问权限。如果这没有必要,并且您想以普通用户身份运行它,那么分隔符内的部分'就足够了。

答案3

也许是这样的:

processes="$(ps -ef)"
for file in *;do
  grep "$file" <<<"$processes"
done

相关内容