#!/usr/bin/env bash set -euo pipefail UMM_ROOT="${UMM_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}" SOURCE_IMAGES="${SOURCE_IMAGES:-/rczhang/rczhang/zhangrch/video_gen/gen_dataset/covt/images}" FILES_PER_SHARD="${FILES_PER_SHARD:-12000}" LIST_DIR="${UMM_ROOT}/data/covt/shard_lists" SHARD_DIR="${UMM_ROOT}/data/covt/shards" unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY mkdir -p "${LIST_DIR}" "${SHARD_DIR}" if [[ ! -d "${SOURCE_IMAGES}" ]]; then echo "Missing source image directory: ${SOURCE_IMAGES}" >&2 exit 1 fi if ! compgen -G "${LIST_DIR}/images-*.txt" >/dev/null; then find "${SOURCE_IMAGES}" -maxdepth 1 -type f -printf '%f\n' \ | LC_ALL=C sort \ | split -d -a 5 -l "${FILES_PER_SHARD}" --additional-suffix=.txt - "${LIST_DIR}/images-" fi for list_path in "${LIST_DIR}"/images-*.txt; do shard_name="$(basename "${list_path}" .txt)" shard_path="${SHARD_DIR}/${shard_name}.tar" checksum_path="${shard_path}.sha256" temporary_path="${shard_path}.partial" if [[ -s "${shard_path}" && -s "${checksum_path}" ]]; then echo "reuse ${shard_name}" continue fi echo "build ${shard_name}" tar -C "${SOURCE_IMAGES}" -cf "${temporary_path}" -T "${list_path}" mv "${temporary_path}" "${shard_path}" ( cd "${SHARD_DIR}" sha256sum "$(basename "${shard_path}")" > "$(basename "${checksum_path}")" ) done expected="$(find "${SOURCE_IMAGES}" -maxdepth 1 -type f | wc -l)" listed="$(awk 'END {print NR}' "${LIST_DIR}"/images-*.txt)" if [[ "${expected}" != "${listed}" ]]; then echo "Image list mismatch: source=${expected}, listed=${listed}" >&2 exit 1 fi echo "Built $(find "${SHARD_DIR}" -maxdepth 1 -name 'images-*.tar' | wc -l) image shards for ${listed} images"