如何筛选名称含abc的目录中不含Random123的iAmAFile文件
筛选符合条件的文件解决方案
现有文件列表
- home/Modules/abc/iAmAFile
文件内容:Random123 - home/Modules/atoz/iAmAFile
文件内容:Random123 - home/Modules/23abc/iAmAFile/src
文件内容:Random1 - home/Modules/123abc/iAmAFile
文件内容:Random3 - home/Modules/123a/src/iAmAFile
文件内容:Random1
期望输出结果
- home/Modules/23abc/src/iAmAFile (内容为Random1)
- home/Modules/123abc/iAmAFile (内容为Random3)
筛选规则
需同时满足以下两个条件:
- 文件内容不包含Random123
- 文件所在路径中存在名称含
abc的目录
不符合规则的文件说明
home/Modules/123a/src/iAmAFile:内容不含Random123,但所有上层目录都不带abchome/Modules/abc/iAmAFile、home/Modules/atoz/iAmAFile:文件内容包含Random123
尝试的命令及问题
执行以下命令:
ls -F Modules/*abc | grep -r -L --include="iAmAFile" "Random123"
输出结果多了不符合目录规则的home/Modules/123a/src/iAmAFile,需要调整命令。
正确命令
使用find命令可精准实现需求:
find home/Modules -type f -name "iAmAFile" -path "*abc*" ! -exec grep -q "Random123" {} \; -print
命令解析
home/Modules:指定搜索的根目录-type f:仅查找文件,忽略目录-name "iAmAFile":匹配文件名为iAmAFile的目标文件-path "*abc*":筛选路径中包含abc的文件(确保所在目录含abc)! -exec grep -q "Random123" {} \;:排除内容包含Random123的文件(-q让grep静默执行,匹配到则返回真,!取反)-print:输出所有符合条件的文件路径
内容的提问来源于stack exchange,提问作者gaMa
相关产品推荐
相关产品推荐

