gpt4 book ai didi

linux - 使用grep函数后如何删除文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:55 27 4
gpt4 key购买 nike

我有以下命令:

grep -rnw '/root/serviceDown/' -e "The service 'httpd' on server is currently down"

结果如下:

/root/serviceDown/2946/000.conf:5:subject=The service 'httpd' on server is currently down
/root/serviceDown/2955/000.conf:5:subject=The service 'httpd' on server is currently down

如何编写一个脚本,在 grep 命令后删除这些文件,然后重新启动服务器?

最佳答案

这可能是您正在寻找的:

grep -lr "The service 'httpd' on server is currently down" /root/serviceDown/ 2>/dev/null | xargs rm

-n-w 标志对您的目的没有真正意义,它们产生的附加信息仅在此处。据我所知,-e 标志也不是必需的,您不需要对您使用的字符串进行扩展模式解释。 -l 标志将输出减少为匹配文件的名称。您使用 2>/dev/null 过滤掉错误输出,最后将生成的文件列表通过管道传输到使用简单 rmxargs 实用程序> 命令删除文件。

之后重启服务器进程可以通过您通常使用的任何命令来完成,只需在上述命令之后执行它,手动或通过简单的 ; 分隔一气呵成。

显然,您需要足够的系统权限才能执行这两个命令...


对于您在下面的评论中提出的结果的更高级处理,我建议您实现一个简单的脚本。这提供了更大的灵 active ,更易于阅读和维护,并且还允许作为单个命令执行。

这可能是您的起点:

#!/bin/bash

# fetch list of matching files
list=`grep -lr "The service 'httpd' on server is currently down" /root/serviceDown/ 2>/dev/null`
if [[ -z "$list" ]]; then
echo "No files matched, nothing to be done...";
exit
fi

# delete files one by one
for match in $list
do
echo "Removing matched file $match..."
echo `rm $match`
done
# restart server process
echo "Restarting server process..."
`service httpd restart`
# that's is, basically
echo "...done."

将该脚本保存到 PATH 环境变量中的某个文件夹中(例如 /root/bin/restartFailedHttpdServer),使其可执行(chmod u+x/root/bin/restartFailedHttpdServer) 最后执行 (restartFailedHttpdServer).

关于linux - 使用grep函数后如何删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43317131/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com