Files
fst_data_pipeline-feature-e…/fst_data_pipeline/pipelines/volc/bag-copy.sh
2026-04-16 16:31:48 +08:00

97 lines
3.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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!"