linux - 查找在特定文件中找到文本的目录
问题描述
如何找到在特定文件中找到文本的目录?例如,我想获取“/var/www/”中包含文件中文本“foo-bundle”的所有composer.json
目录。我有一个已经完成的命令:
find ./ -maxdepth 2 -type f -print | grep -i 'composer.json' | xargs grep -i '"foo-bundle"'
但是我想制作一个sh
脚本来获取所有这些目录并用它们做事。任何想法?
解决方案
寻找
您当前的命令几乎就在那里,而不是使用xargs
with grep
,让:
find ./ -maxdepth 2 -type f -exec grep -l "foo-bundle" {} /dev/null \; | xargs dirname
如果您只想搜索composer.json
文件,我们可以包含如下-iname
选项:
find ./ -maxdepth 2 -type f -iname '*composer.json' -exec grep -l "foo-bundle" {} /dev/null \; | xargs dirname
如果| xargs dirname
没有提供足够的数据,我们可以扩展它,这样我们就可以循环find
使用while read
这样的结果:
find ./ -maxdepth 2 -type f -iname '*composer.json' -exec grep -l "foo-bundle" {} /dev/null \; | while read -r line ; do
parent="$(dirname ${line%%:*})"
echo "$parent"
done
grep
我们可以使用grep 来搜索所有包含特定文本的文件。
遍历每一行后,我们可以
考虑这个文件设置,/test/b/composer.json
包含foo-bundle
➜ /tmp tree
.
├── test
│ ├── a
│ │ └── composer.json
│ └── b
│ └── composer.json
└── test.sh
运行以下命令时test.sh
:
#!/bin/bash
grep -rw '/tmp/test' --include '*composer.json' -e 'foo-bundle' | while read -r line ; do
parent="$(dirname ${line%:*})"
echo "$parent"
done
结果与预期的一样,文件夹的路径b
:
/tmp/test/b
推荐阅读
- html - 在特定高度 Div 内安装 Flex 项目
- asp.net - 在 MVC 5 中使用复选框按布尔列过滤表
- php - Symfony Finder 找不到具有两位数的文件
- sql - 根据字段中的数据结构确定要返回的记录
- android - 为什么 RealmRecyclerViewAdapter 不起作用?
- c# - Visual Studio 2017 社区按钮大小大于图像列表中的图像
- c# - asp.net core 2 Web API 超时问题
- r - 识别相同值之间的序列
- r - 将带有日期和时间信息的字符串列转换为R中的日期时间类型
- css - 从草图导出的材质 SVG 未显示在客户端的浏览器中,但在我的浏览器中很好 - 如何测试?