如何扩展Bash脚本,筛选满足双内容条件的文件所在目录
扩展Bash脚本满足双重条件
你可以通过在find的-exec中嵌套shell命令,同时验证两个文件的条件。这里提供两种可行的写法:
写法一:基于原脚本扩展(先筛选符合条件的name文件,再验证同目录的available_instances)
find ../../devices -type f -name "name" -exec grep -q "8Q" {} \; -exec sh -c ' # 获取当前name文件所在的目录 dir=$(dirname "$1") # 检查该目录下的available_instances是否包含数字"1" if grep -q "1" "$dir/available_instances"; then echo "$dir" fi ' sh {} \;
- 保留原脚本前半部分,先定位所有包含"8Q"的
name文件 - 通过
sh -c启动子shell,用dirname提取文件所在目录 - 对该目录下的
available_instances文件做grep检查,符合条件就输出目录
写法二:直接遍历目录验证两个条件
find ../../devices -type d -exec sh -c ' # 同时验证两个条件:name含"8Q",available_instances含"1" if grep -q "8Q" "$1/name" 2>/dev/null && grep -q "1" "$1/available_instances" 2>/dev/null; then echo "$1" fi ' sh {} \;
- 直接遍历所有子目录,一次性检查两个文件的条件
2>/dev/null用来屏蔽文件不存在时的错误提示,避免干扰正常输出
两种写法都能满足需求:第一种先过滤掉无符合条件name文件的目录,子目录较多时效率更高;第二种逻辑更直观,便于理解和维护。
内容的提问来源于stack exchange,提问作者rixter
相关产品推荐
相关产品推荐

