递归查找指定文件并排除含特定子串的子目录及路径处理
筛选并格式化project.json路径
我需要查找所有包含project.json文件的路径,执行以下命令后得到初始结果:
find apps -type f -name "project.json"
结果如下:
apps/sub/frontend-e2e/project.json apps/sub/frontend/project.json apps/sub/backend/project.json
但我想实现两个目标:
- 排除所有最后一级目录包含
-e2e的路径 - 将结果路径的开头
apps/和结尾/project.json移除
最终期望得到这样的结果:
sub/frontend sub/backend
我曾尝试过这个命令,但没能达到预期:
find apps -type f -name "project.json" -not \( -path "*-e2e" -prune \)
可行的Shell命令方案
可以通过find结合sed来实现需求:
find apps -type d -name "*-e2e" -prune -o -type f -name "project.json" -print | sed -e 's/^apps\///' -e 's/\/project.json$//'
-type d -name "*-e2e" -prune:直接跳过所有名称带-e2e的目录,避免在这些目录下查找-o -type f -name "project.json" -print:匹配符合条件的project.json文件并输出路径sed命令:通过两次替换,分别移除开头的apps/和结尾的/project.json
JavaScript中的实现方式
如果用JavaScript,我会这样写:
glob.sync('apps/**/project.json', { ignore: ['apps/**/*-e2e/project.json'] }).map((path) => { // 移除开头的apps/和结尾的/project.json return path.replace(/^apps\//, '').replace(/\/project.json$/, ''); })
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

