Bash如何查找符合名称规则的文件所在目录
解决方案
你可以通过组合find、路径提取、去重、文本拼接的命令直接得到目标格式的输出,根据你使用的系统环境选对应命令即可:
- 适用于Linux(GNU工具链)的最简命令:
find . -name "example*" -type f -printf '%h\n' | sort -u | sed 's|^\./||' | paste -sd ', ' -
- 适用于macOS/BSD系统的兼容命令(BSD版find无GNU专属的
-printf参数):
find . -name "example*" -type f -exec dirname {} \; | sort -u | sed 's|^\./||' | paste -sd ', ' -
命令各段作用说明
-type f:限定只匹配普通文件,避免同名目录被误算入结果- 路径提取段:GNU环境用
-printf '%h\n'直接输出文件所在目录;BSD环境用-exec dirname {} \;调用dirname命令提取目录,二者效果一致 sort -u:对目录路径排序并去重,同一个目录下存在多个example开头文件时只会保留一次记录sed 's|^\./||':删除路径开头默认带的./前缀,输出纯子文件夹路径格式paste -sd ', ' -:把逐行的目录结果用「逗号+空格」拼接为单行,输出格式和你要求的subfolder1, subfolder4, subfolder8完全一致
如果存在嵌套子文件夹存目标文件的情况(比如
subfolder1/nested/下也有example开头文件),命令也会正确将嵌套路径列在结果中。
内容的提问来源于stack exchange,提问作者villanelle
相关产品推荐
相关产品推荐

