Files
fst_data_pipeline-feature-e…/fst_data_pipeline/pipelines/volc/bag-copy.sh

97 lines
3.2 KiB
Bash
Raw Normal View History

2026-04-16 15:44:32 +08:00
#!/usr/bin/env bash
set -euo pipefail
# 外部必须导出:
# INPUT_ROOT WORKFLOW_ID SUB_DIR OUTPUT_ROOT
INPUT_ROOT="${INPUT_ROOT}/${WORKFLOW_ID}"
INPUT_DIR="${INPUT_ROOT}/${SUB_DIR}" # 实际指向 bagdir_splits 上一级
OUTPUT_DIR="${OUTPUT_ROOT}" # 通常就是 /nas_perception/.../output/wfxxx
log(){
echo "[$(date '+%F %T')] [$$] $*"
}
#----------------------------------------------------------
# 统一封装:目录同步 / 文件拷贝
#----------------------------------------------------------
sync_dir(){
local srcDir="$1" dstDir="$2"
if [[ -d ${srcDir} ]]; then
log " + $(basename "${srcDir}")/"
mkdir -p "${dstDir}"
rsync -a --delete "${srcDir}/" "${dstDir}/"
fi
}
sync_file(){
local srcFile="$1" dstDir="$2"
if [[ -f ${srcFile} ]]; then
log " + $(basename "${srcFile}")"
mkdir -p "${dstDir}"
cp -p "${srcFile}" "${dstDir}/"
fi
}
#----------------------------------------------------------
# 主逻辑
#----------------------------------------------------------
log "Script started"
log "INPUT_DIR = ${INPUT_DIR}"
log "OUTPUT_DIR = ${OUTPUT_DIR}"
[[ -d ${INPUT_DIR} ]] || { log "ERROR: INPUT_DIR not found: ${INPUT_DIR}"; exit 1; }
while IFS= read -r -d '' src; do
# 去掉 split_N 层级,得到纯 bag.dir 名
rel="${src#${INPUT_DIR}/*/}"
dest="${OUTPUT_DIR}/${rel}/derived/${SUB_DIR}"
mkdir -p "${dest}"
basename_bag=$(basename "$src") # xxx.bag.dir
pkgname="${basename_bag%.bag.dir}" # xxx
split_name=$(basename "$(dirname "$src")") # split_0 / split_1 / ...
truth_root="${INPUT_DIR}/${split_name}"
log "==================== Processing ${pkgname} ==================="
# 1. 老 object 重命名同步
sync_dir "${src}/object_det_ep20" "${dest}/object_det_al"
sync_dir "${src}/object_tracking" "${dest}/object_tracking_al"
# 2. 目录类slam + lidar_gt + 新增 6 目录
for item in slam_lidar_ground slam_lidar_none_ground \
lidar_gt_pandar128_5f_front lidar_gt_pandar128_5f_rear \
object_det_ep20_lrgt_front object_det_ep20_lrgt_rear \
object_lrgt_filter object_postprocess; do
sync_dir "${src}/${item}" "${dest}/${item}"
done
# 3. 文件类
for item in bev_image_ground.png ego_motion_slam_lidar.csv; do
sync_file "${src}/${item}" "${dest}"
done
# 4. osm & split_json源在 OUTPUT_ROOT/SUB_DIR/split_N/
osm_src="${truth_root}/osm_out/${pkgname}.osm"
if [[ -f ${osm_src} ]]; then
log " + ${pkgname}.osm -> input bag.dir"
cp -p "${osm_src}" "${src}/"
log " + ${pkgname}.osm -> output"
cp -p "${src}/${pkgname}.osm" "${dest}/"
fi
split_src="${truth_root}/split_json/${pkgname}"
if [[ -d ${split_src} ]]; then
log " + split_json/ -> input bag.dir"
rsync -a --delete "${split_src}/" "${src}/split_json/"
log " + split_json/ -> output"
sync_dir "${src}/split_json" "${dest}/split_json"
fi
# 5. 2dseg and occ
sync_dir "${src}/${SUB_DIR}" "${dest}"
done < <(find "${INPUT_DIR}" -mindepth 2 -maxdepth 2 -type d -name '*.bag.dir' -print0)
log "============================================================"
log "All done, success!"