查找具有特定路径的 XML 文件

dot*_*hen 4 grep bash xml locate file-search

我正在处理 XML 文件,每个文件都可能有几十行长。在一个目录结构中,实际上有数百个这样的文件。是的,它是 Magento。

我需要找到包含该<foo><bar><boom><bang>元素的文件。一个<boom><bang>标签可以在其他变量定义的,所以我需要搜索的完整路径不只是结束标签或标签。每个标签之间可能有几十行,它们之间还有其他标签:

<foo>
  <hello_world>
... 50 lines ....
  </hello_world>
  <bar>
    <giraffe>
... 50 lines ....
    </giraffe>
    <boom>
      <bang>Vital information here</bang>
    </boom>
  </bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

搜索定义的文件的优雅*nix 方式是<foo><bar><boom><bang>什么?我目前正在使用最新的 Debian 派生发行版。

这是我目前的解决方案,远非雄辩:

$ grep -rA 100 foo * | grep -A 100 bar | grep -A 100 boom | grep bang | grep -E 'foo|bar|boom|bang'
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 5

你可以尝试xmlstarletselECT iF中的路径存在,那么输出的filename:

find . -name '*.xml' -exec xmlstarlet sel -t -i '/foo/bar/boom/bang' -f -n {} +
Run Code Online (Sandbox Code Playgroud)