如何结合find与xmllint命令实现XML文件批量去重查询?
解决方法
直接用以下命令就能完成批量查询XML节点并去重的需求:
find /path/to/directory -name "*.xml" -exec xmllint --xpath "//bundle/artifact/text()" {} \; | sort -u
为什么原命令不生效?
xmllint默认不会从标准输入读取待处理的文件名,而是需要将文件名作为命令行参数传入。你之前的管道把文件名传给xmllint时,它无法识别这是待处理文件,所以执行失败。
命令各部分说明
find /path/to/directory -name "*.xml":直接定位目标目录下所有XML文件,比find .再加grep更高效,避免遍历无关目录。-exec xmllint --xpath "//bundle/artifact/text()" {} \;:对每个找到的XML文件执行xmllint命令,{}代表当前找到的文件名,text()用来提取节点的纯文本内容(如果不加会输出包含<artifact>标签的完整节点,不利于去重)。sort -u:对所有查询结果排序,并自动去除重复项。
如果习惯用xargs,也可以用这个版本:
find /path/to/directory -name "*.xml" | xargs -I {} xmllint --xpath "//bundle/artifact/text()" {} | sort -u
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

