Linux 在多个文件夹中的同名文件中搜索文本(最大深度 2)并生成报告文件

Linux 在多个文件夹中的同名文件中搜索文本(最大深度 2)并生成报告文件

情况: 在 Linux 中,我有一个父文件夹,里面有 22 个不同名称的文件夹,每个文件夹都有一个特定名称的文件asset.xml。这些文件夹中还有数百个其他文件夹asset.xml,但这些是以前的版本,我对它们不感兴趣。我需要在每个文件中搜索 3 个标签"legend|assetID|name"并返回这些标签内的信息。它们通常在同一行,所以我认为Grep没问题。

我尝试过的:

grep -nr -E "legend|assetID|name" . > /dir/to/the/ReportFile.txt

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

find . -maxdepth 2 -exec grep -E "legend|assetID|name" . > /dir/to/the/ReportFile.txt

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

find . -maxdepth 2 -| grep -E "legend|assetID|name" . > /dir/to/the/ReportFile.txt

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

问题: 我如何遍历各个不同名称的文件夹内的每个同名文件(其中还有其他包含同名文件的子文件夹)并提取 3 个标签内的信息并将这些数据写入输出文件?

答案1

我刚刚找到了解决方案。

grep -nr -E "legend|assetID|name" /dir/to/the/*/asset.xml > /dir/to/the/ReportFile.txt

路径中的*是我需要遍历每个目录的“通配符”。我认为它只会进入该目录,而不会进入任何更深的文件夹……?

答案2

您的命令行find几乎是正确的:-)

找到的文件find用 表示{}-execfind 命令行的部分必须以某种方式完成,\;通常用 或 更好,只+调用grep一次,我建议你grep只在普通文件上运行-type f,尝试

find . -maxdepth 2 -type f -exec grep -E "legend|assetID|name" {} + > ../output

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

find . -maxdepth 2 -type f -name asset.xml -exec grep -E "legend|assetID|name" {} + > ../output

使用以下方法检查结果

cat ../output

您可能需要将 maxdepth 修改为 3 或任何合适的值。

相关内容