如何在Shell脚本中提取ROS2 Bag的大小信息(无需ROS1)
提取ROS2 Bag文件大小的Shell脚本方法
ROS2的ros2 bag info确实没有ROS1里的-y/-k参数,但可以通过解析输出内容来提取大小,给你两种可靠的方法:
方法1:解析默认文本输出
ros2 bag info的默认输出里会明确列出"Total size"行,直接用grep+awk就能提取数值:
#!/bin/bash # 传入Bag文件路径作为脚本参数 BAG_FILE="$1" # 提取字节数 BAG_SIZE=$(ros2 bag info "$BAG_FILE" | grep "Total size:" | awk '{print $3}') # 输出结果 echo "Bag文件大小:$BAG_SIZE 字节"
原理:用grep定位到包含"Total size:"的行,再用awk取第三个字段(对应数值部分)。
方法2:用JSON输出+jq工具(更稳定)
ROS2支持以JSON格式输出bag信息,配合jq工具能精准提取字段,避免文本格式变动导致的失效:
首先确保系统装了jq(Debian/Ubuntu系可以跑sudo apt install jq安装),然后用下面的脚本:
#!/bin/bash BAG_FILE="$1" # 从JSON输出中提取size字段 BAG_SIZE=$(ros2 bag info --output json "$BAG_FILE" | jq '.size') echo "Bag文件大小:$BAG_SIZE 字节"
如果需要转换单位(比如转成MB),可以加一段计算:
# 转换为MB(保留两位小数) BAG_SIZE_MB=$(echo "scale=2; $BAG_SIZE / 1024 / 1024" | bc) echo "Bag文件大小:$BAG_SIZE_MB MB"
内容的提问来源于stack exchange,提问作者user18431186
相关产品推荐
相关产品推荐

