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