首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux在多个文件夹中搜索同名文件中的文本(max纵深2),并生成报告文件。

Linux在多个文件夹中搜索同名文件中的文本(max纵深2),并生成报告文件。
EN

Ask Ubuntu用户
提问于 2019-01-15 04:57:46
回答 2查看 66关注 0票数 1

情境:在Linux中,我有一个父文件夹,有22个不同名称的文件夹,每个文件夹都有一个特定名称的文件asset.xml。另外,在这些文件夹中还有数百个包含asset.xml的其他文件夹,但这些都是以前的版本,我对它们不感兴趣。我需要在每个文件中搜索3个标签"legend|assetID|name"并返回这些标签中的信息。他们通常都在同一条线路上,所以我认为Grep是可以的。

我尝试过的:

代码语言:javascript
复制
grep -nr -E "legend|assetID|name" . > /dir/to/the/ReportFile.txt

这需要花费太长的时间,并且返回太多重复的数据,因此这是不切实际的。

代码语言:javascript
复制
find . -maxdepth 2 -exec grep -E "legend|assetID|name" . > /dir/to/the/ReportFile.txt

这返回了一个错误,-exec缺少一个参数,因此输出文件是空的。

代码语言:javascript
复制
find . -maxdepth 2 -| grep -E "legend|assetID|name" . > /dir/to/the/ReportFile.txt

这将返回一个空的输出文件。

问:我如何在不同的命名文件夹(也有其他同名文件的子文件夹)中遍历每个类似命名的文件,并提取3个标记中的信息并将这些数据写入输出文件?

EN

回答 2

Ask Ubuntu用户

发布于 2019-01-15 05:23:22

我刚找到解决办法。

代码语言:javascript
复制
grep -nr -E "legend|assetID|name" /dir/to/the/*/asset.xml > /dir/to/the/ReportFile.txt

路径中的*是我遍历每个目录所需的“通配符”。我想它只会进入那个目录而不会进入更深的文件夹.?

票数 1
EN

Ask Ubuntu用户

发布于 2019-01-15 07:18:30

使用find的命令行几乎是正确的:

find找到的文件(S)由{}表示。查找命令行的-exec部分必须以某种方式使用\;完成,或者更好地使用只调用grep一次的+,我建议您只在普通文件-type f上运行grep,尝试

代码语言:javascript
复制
find . -maxdepth 2 -type f -exec grep -E "legend|assetID|name" {} + > ../output

您可能需要指定文件名asset.xml

代码语言:javascript
复制
find . -maxdepth 2 -type f -name asset.xml -exec grep -E "legend|assetID|name" {} + > ../output

代码语言:javascript
复制
cat ../output

您可能希望将最大深度修改为3或任何合适的内容。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1109818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档