Linux下用Shell命令查找目录中指定字符串并返回状态码的方法
Linux下查找指定目录中含特定文本的文件并自定义返回状态码
要实现在指定目录递归查找包含特定文本的文件,找到时返回状态码1,未找到时返回状态码0的需求,可通过以下方式处理:
一、修正基础查找命令
你提供的示例命令存在路径匹配问题:末尾的/*.txt会匹配当前工作目录下的txt文件,而非目标递归目录内的文件。正确的递归查找指定类型文件的命令应该用--include参数限定文件类型:
# 递归查找目标目录下所有txt文件中包含指定字符串的内容 grep -r --include="*.txt" "34161FA8203289722240CD40" /usr/lib/cgi-bin/ParkingSoft/api/v3/LaneApi/ETC/MywebSocket
二、反转返回状态码
Linux中grep的默认返回逻辑是:
- 找到匹配内容:返回状态码0
- 未找到匹配内容:返回状态码1
- 发生错误(如目录不存在):返回状态码2
要实现需求中的反转逻辑,有两种简单方法:
方法1:用!反转退出状态
添加-q参数启用安静模式(不输出匹配内容,仅返回状态),再通过!反转返回值:
# 找到匹配返回1,未找到返回0 ! grep -rq --include="*.txt" "34161FA8203289722240CD40" /usr/lib/cgi-bin/ParkingSoft/api/v3/LaneApi/ETC/MywebSocket
方法2:用if条件判断(更直观)
通过脚本逻辑明确控制返回状态:
if grep -rq --include="*.txt" "34161FA8203289722240CD40" /usr/lib/cgi-bin/ParkingSoft/api/v3/LaneApi/ETC/MywebSocket; then # 找到匹配,返回状态码1 exit 1 else # 未找到匹配,返回状态码0 exit 0 fi
参数说明
-r:递归遍历目标目录下的所有子目录与文件-q:安静模式,不输出任何匹配结果,仅返回状态码--include="*.txt":仅查找扩展名为.txt的文件,若需查找所有文件可去掉该参数
内容的提问来源于stack exchange,提问作者Prakash Kumar Gupta
相关产品推荐
相关产品推荐

