This commit is contained in:
2026-04-03 13:22:51 +02:00
parent fd946ce7e2
commit 213a834971

View File

@@ -33,6 +33,12 @@ READY="$(normalize_path "$READY")"
DEST1="$(normalize_path "$DEST1")" DEST1="$(normalize_path "$DEST1")"
DEST2="$(normalize_path "$DEST2")" DEST2="$(normalize_path "$DEST2")"
# ----------------------------------------
# TRACKING
# ----------------------------------------
declare -A CREATED_DIRS_DEST1
declare -A CREATED_DIRS_DEST2
# ---------------------------------------- # ----------------------------------------
# FUNCTIONS # FUNCTIONS
# ---------------------------------------- # ----------------------------------------
@@ -66,6 +72,26 @@ rsync_cmd() {
fi 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 # VERIFY DESTINATIONS
# ---------------------------------------- # ----------------------------------------
@@ -140,8 +166,20 @@ while read -r FILE; do
DEST1_FILE="$DEST1/$REL" DEST1_FILE="$DEST1/$REL"
DEST2_FILE="$DEST2/$REL" DEST2_FILE="$DEST2/$REL"
mkdir -p "$(dirname "$DEST1_FILE")" DIR1="$(dirname "$DEST1_FILE")"
mkdir -p "$(dirname "$DEST2_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" log "SYNC -> $REL"
@@ -162,14 +200,22 @@ while read -r FILE; do
done < <(find "$READY" -type f 2>/dev/null) done < <(find "$READY" -type f 2>/dev/null)
# ---------------------------------------- # ----------------------------------------
# 3. FIX OWNERSHIP (SMART) # 3. FIX OWNERSHIP (PRECISION MODE)
# ---------------------------------------- # ----------------------------------------
log "CHANGED=$CHANGED" log "CHANGED=$CHANGED"
if [ "$CHANGED" = true ]; then if [ "$CHANGED" = true ]; then
log "FIX OWNERSHIP -> DEST1 + DEST2" log "FIX OWNERSHIP (state-aware)"
run_cmd chown -R "$CHOWN_USER:$CHOWN_GROUP" "$DEST1"
run_cmd chown -R "$CHOWN_USER:$CHOWN_GROUP" "$DEST2" 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 fi
# ---------------------------------------- # ----------------------------------------