From 213a8349719cbd92db59b012b112f6920648eb70 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Fri, 3 Apr 2026 13:22:51 +0200 Subject: [PATCH] . --- unRAID Userscript/music_sync.sh | 58 +++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/unRAID Userscript/music_sync.sh b/unRAID Userscript/music_sync.sh index 0e37766..823d8c4 100644 --- a/unRAID Userscript/music_sync.sh +++ b/unRAID Userscript/music_sync.sh @@ -33,6 +33,12 @@ READY="$(normalize_path "$READY")" DEST1="$(normalize_path "$DEST1")" DEST2="$(normalize_path "$DEST2")" +# ---------------------------------------- +# TRACKING +# ---------------------------------------- +declare -A CREATED_DIRS_DEST1 +declare -A CREATED_DIRS_DEST2 + # ---------------------------------------- # FUNCTIONS # ---------------------------------------- @@ -66,6 +72,26 @@ rsync_cmd() { fi } +# ---------------------------------------- +# TRACK NEW DIRECTORIES +# ---------------------------------------- +track_new_dirs() { + local BASE="$1" + local FULL="$2" + + local PATH_ACCUM="$BASE" + + IFS='/' read -ra PARTS <<< "${FULL#$BASE/}" + + for PART in "${PARTS[@]}"; do + PATH_ACCUM="$PATH_ACCUM/$PART" + + if [ ! -d "$PATH_ACCUM" ]; then + echo "$PATH_ACCUM" + fi + done +} + # ---------------------------------------- # VERIFY DESTINATIONS # ---------------------------------------- @@ -140,8 +166,20 @@ while read -r FILE; do DEST1_FILE="$DEST1/$REL" DEST2_FILE="$DEST2/$REL" - mkdir -p "$(dirname "$DEST1_FILE")" - mkdir -p "$(dirname "$DEST2_FILE")" + DIR1="$(dirname "$DEST1_FILE")" + DIR2="$(dirname "$DEST2_FILE")" + + # track ALL new dirs + while read -r NEWDIR; do + CREATED_DIRS_DEST1["$NEWDIR"]=1 + done < <(track_new_dirs "$DEST1" "$DIR1") + + while read -r NEWDIR; do + CREATED_DIRS_DEST2["$NEWDIR"]=1 + done < <(track_new_dirs "$DEST2" "$DIR2") + + mkdir -p "$DIR1" + mkdir -p "$DIR2" log "SYNC -> $REL" @@ -162,14 +200,22 @@ while read -r FILE; do done < <(find "$READY" -type f 2>/dev/null) # ---------------------------------------- -# 3. FIX OWNERSHIP (SMART) +# 3. FIX OWNERSHIP (PRECISION MODE) # ---------------------------------------- log "CHANGED=$CHANGED" if [ "$CHANGED" = true ]; then -log "FIX OWNERSHIP -> DEST1 + DEST2" - run_cmd chown -R "$CHOWN_USER:$CHOWN_GROUP" "$DEST1" - run_cmd chown -R "$CHOWN_USER:$CHOWN_GROUP" "$DEST2" + log "FIX OWNERSHIP (state-aware)" + + for DIR in "${!CREATED_DIRS_DEST1[@]}"; do + log "CHOWN DEST1 -> $DIR" + run_cmd chown -R "$CHOWN_USER:$CHOWN_GROUP" "$DIR" + done + + for DIR in "${!CREATED_DIRS_DEST2[@]}"; do + log "CHOWN DEST2 -> $DIR" + run_cmd chown -R "$CHOWN_USER:$CHOWN_GROUP" "$DIR" + done fi # ----------------------------------------