This commit is contained in:
2026-04-03 13:46:40 +02:00
parent 213a834971
commit 4d8293e17b

View File

@@ -36,8 +36,8 @@ DEST2="$(normalize_path "$DEST2")"
# ----------------------------------------
# TRACKING
# ----------------------------------------
declare -A CREATED_DIRS_DEST1
declare -A CREATED_DIRS_DEST2
declare -A CHANGED_DIRS_DEST1
declare -A CHANGED_DIRS_DEST2
# ----------------------------------------
# FUNCTIONS
@@ -73,22 +73,16 @@ rsync_cmd() {
}
# ----------------------------------------
# TRACK NEW DIRECTORIES
# FIX OWNERSHIP TREE
# ----------------------------------------
track_new_dirs() {
local BASE="$1"
local FULL="$2"
fix_tree() {
local DIR="$1"
local ROOT="$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
while [[ "$DIR" == "$ROOT"* ]]; do
run_cmd chown "$CHOWN_USER:$CHOWN_GROUP" "$DIR"
[[ "$DIR" == "$ROOT" ]] && break
DIR="$(dirname "$DIR")"
done
}
@@ -137,7 +131,6 @@ CHANGED=false
log "---- MOVE: INCOMING → READY ----"
while read -r FILE; do
[ -f "$FILE" ] || continue
REL="${FILE#"$INCOMING"/}"
@@ -169,15 +162,6 @@ while read -r FILE; do
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"
@@ -191,6 +175,10 @@ while read -r FILE; do
if [[ $STATUS1 -eq 0 && $STATUS2 -eq 0 ]]; then
CHANGED=true
CHANGED_DIRS_DEST1["$DIR1"]=1
CHANGED_DIRS_DEST2["$DIR2"]=1
log "OK -> delete $REL"
run_cmd rm "$FILE"
else
@@ -200,21 +188,21 @@ while read -r FILE; do
done < <(find "$READY" -type f 2>/dev/null)
# ----------------------------------------
# 3. FIX OWNERSHIP (PRECISION MODE)
# 3. FIX OWNERSHIP (SMART TREE)
# ----------------------------------------
log "CHANGED=$CHANGED"
if [ "$CHANGED" = true ]; then
log "FIX OWNERSHIP (state-aware)"
log "FIX OWNERSHIP (tree mode)"
for DIR in "${!CREATED_DIRS_DEST1[@]}"; do
log "CHOWN DEST1 -> $DIR"
run_cmd chown -R "$CHOWN_USER:$CHOWN_GROUP" "$DIR"
for DIR in "${!CHANGED_DIRS_DEST1[@]}"; do
log "FIX DEST1 -> $DIR"
fix_tree "$DIR" "$DEST1"
done
for DIR in "${!CREATED_DIRS_DEST2[@]}"; do
log "CHOWN DEST2 -> $DIR"
run_cmd chown -R "$CHOWN_USER:$CHOWN_GROUP" "$DIR"
for DIR in "${!CHANGED_DIRS_DEST2[@]}"; do
log "FIX DEST2 -> $DIR"
fix_tree "$DIR" "$DEST2"
done
fi