Linux命令:查找所有直接父目录为target的txt文件
查找指定规则文件的Linux命令实现
需求说明
待检索的全量文件列表如下:
/target/a.txt /target/module2/target/b.txt /target/module2/target/OtherDir/NotRequired.txt /target/module2/target/module3/target/c.txt /target/module2/target/module3/target/anotherDir/NotRequired.txt
匹配规则:
- 仅匹配
.txt格式的普通文件 - 文件的直接父目录名称必须为
target target目录下其他非target命名的子目录内的文件,不属于匹配范围
预期匹配输出列表:
/target/a.txt /target/module2/target/b.txt /target/module2/target/module3/target/c.txt
实现命令
使用find命令即可精准实现需求,命令如下:
find /target -type f -name "*.txt" -exec sh -c 'basename "$(dirname "{}")" = "target"' \; -print
命令参数说明
find /target:指定从/target根路径开始递归遍历所有文件-type f:限定只查找普通文件,过滤目录、软链接等特殊类型文件-name "*.txt":筛选后缀为.txt的文件-exec sh -c 'basename "$(dirname "{}")" = "target"' \;:对每一个候选文件做校验:先通过dirname获取文件的直接父目录路径,再通过basename提取父目录的名称,判断名称是否严格等于target,只有校验通过的文件才会进入后续流程-print:打印所有符合全部条件的文件的完整路径
这个写法不存在路径通配符匹配的歧义问题,不管目录嵌套多少层,都能严格命中直接父目录为target的txt文件,不会误匹配其他子目录下的文件。
内容的提问来源于stack exchange,提问作者user19279490
相关产品推荐
相关产品推荐

