.
This commit is contained in:
@@ -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
|
||||
|
||||
# ----------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user