You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改find命令使文件路径与Version标签内容同行输出?

问题:调整find命令输出格式,让文件路径与Version信息同行显示

我编写了如下find命令,用于搜索/main_folder/kits/目录下深度不超过2、文件名以moon_开头且以.xml结尾、并包含<Version>标签的文件:

find   /main_folder/kits/  -maxdepth 2  -name "moon*" -name "*.xml" -exec grep '<Version>' {} \;    -exec echo {} \;

当前命令会分别输出<Version>标签内容和文件路径,示例输出如下:

<Version>1.3.12-dev.137</Version>
/main_folder/kits/A/moon_aaa.xml
    <Version>2.1.1-dev.13</Version>
/main_folder/kits/B/moon_bbb.xml
        <Version>1.0.144</Version>
/main_folder/kits/C/moon_ccc.xml

我希望将每个文件的路径与对应的Version信息调整为同行输出,示例如下:

/main_folder/kits/A/moon_aaa.xml <Version>1.3.12-dev.137</Version>
/main_folder/kits/B/moon_bbb.xml <Version>2.1.1-dev.13</Version>
/main_folder/kits/C/moon_ccc.xml <Version>1.0.144</Version>

请问需要在原命令中添加什么内容,才能实现这样的同行输出效果?


解决方案

你需要把原来两个独立的-exec操作合并为一个shell命令,让文件名和grep结果在同一行输出,修改后的命令如下:

find /main_folder/kits/ -maxdepth 2 -name "moon_*.xml" -exec sh -c 'echo "$0 $(grep "<Version>" "$0")"' {} \;

关键修改说明:

  1. 合并执行逻辑:用sh -c启动一个shell进程,在同一个进程内处理文件名和grep结果,避免两次独立输出导致的换行
  2. 精准匹配文件名:把原来的-name "moon*" -name "*.xml"合并为-name "moon_*.xml",直接匹配moon_开头的xml文件,减少不必要的匹配
  3. 同行拼接内容:$0对应find传递的文件路径,先输出路径,再通过$(grep "<Version>" "$0")插入提取到的Version标签内容

如果需要去除Version行前面的空白缩进(比如示例里的前置空格),可以加上sed处理:

find /main_folder/kits/ -maxdepth 2 -name "moon_*.xml" -exec sh -c 'echo "$0 $(grep "<Version>" "$0" | sed "s/^[[:space:]]*//")"' {} \;

内容的提问来源于stack exchange,提问作者Judy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:08:12