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