#!/usr/bin/env bash set -euo pipefail BASE_DIR=${1:-/dev/shm/voip_rec} INCOMING_DIR="$BASE_DIR/incoming" READY_DIR="$BASE_DIR/ready" FAILED_DIR="$BASE_DIR/failed" MIN_AGE_SECONDS=${MIN_AGE_SECONDS:-15} mkdir -p "$INCOMING_DIR" "$READY_DIR" "$FAILED_DIR" chmod 0750 "$BASE_DIR" "$INCOMING_DIR" "$READY_DIR" "$FAILED_DIR" find "$INCOMING_DIR" -type f \( -name '*.wav' -o -name '*.mp3' \) -print0 | while IFS= read -r -d '' source; do if [ ! -s "$source" ]; then continue fi now=$(date +%s) mtime=$(stat -c %Y "$source") if [ $((now - mtime)) -lt "$MIN_AGE_SECONDS" ]; then continue fi if command -v fuser >/dev/null 2>&1 && fuser -s -- "$source"; then continue fi rel=${source#"$INCOMING_DIR"/} part="$READY_DIR/$rel.part" ready="$READY_DIR/$rel.ready" failed="$FAILED_DIR/$rel" mkdir -p "$(dirname "$part")" "$(dirname "$failed")" chmod 0750 "$(dirname "$part")" "$(dirname "$failed")" if [ -e "$ready" ] || [ -e "$part" ]; then mv -- "$source" "$failed.$(date -u +%Y%m%dT%H%M%SZ).duplicate" continue fi mv -- "$source" "$part" chmod 0640 "$part" mv -- "$part" "$ready" done