情境:在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个标记中的信息并将这些数据写入输出文件?
发布于 2019-01-15 05:23:22
我刚找到解决办法。
grep -nr -E "legend|assetID|name" /dir/to/the/*/asset.xml > /dir/to/the/ReportFile.txt路径中的*是我遍历每个目录所需的“通配符”。我想它只会进入那个目录而不会进入更深的文件夹.?
发布于 2019-01-15 07:18:30
使用find的命令行几乎是正确的:
find找到的文件(S)由{}表示。查找命令行的-exec部分必须以某种方式使用\;完成,或者更好地使用只调用grep一次的+,我建议您只在普通文件-type f上运行grep,尝试
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您可能希望将最大深度修改为3或任何合适的内容。
https://askubuntu.com/questions/1109818
复制相似问题