diff --git a/osync.sh b/osync.sh index a7db1f4..7cffef4 100755 --- a/osync.sh +++ b/osync.sh @@ -2075,12 +2075,16 @@ function _delete_remote { fi #TODO: check output file without & and sleep 5 -$SSH_CMD ERROR_ALERT=0 sync_on_changes=$sync_on_changes _SILENT=$_SILENT _DEBUG=$_DEBUG _DRYRUN=$_DRYRUN _VERBOSE=$_VERBOSE COMMAND_SUDO=$COMMAND_SUDO FILE_LIST="$(EscapeSpaces "$TARGET_STATE_DIR/$deleted_list_file")" REPLICA_DIR="$(EscapeSpaces "$replica_dir")" DELETE_DIR="$(EscapeSpaces "$deletion_dir")" FAILED_DELETE_LIST="$(EscapeSpaces "${TARGET[1]}${TARGET[3]}/$deleted_failed_list_file")" 'bash -s' << 'ENDSSH' > "$RUN_DIR/$PROGRAM.remote_deletion.$SCRIPT_PID" 2>&1 - +local TARGET_STATE_DIR="${TARGET[1]}${TARGET[3]}" +local DELETE_CMD=( +$SSH_CMD ERROR_ALERT=0 sync_on_changes=$sync_on_changes _SILENT=$_SILENT _DEBUG=$_DEBUG _DRYRUN=$_DRYRUN _VERBOSE=$_VERBOSE COMMAND_SUDO=$COMMAND_SUDO FILE_LIST="$(EscapeSpaces "$TARGET_STATE_DIR/$deleted_list_file")" REPLICA_DIR="$(EscapeSpaces "$replica_dir")" DELETE_DIR="$(EscapeSpaces "$deletion_dir")" FAILED_DELETE_LIST="$(EscapeSpaces "${TARGET[1]}${TARGET[3]}/$deleted_failed_list_file")" 'bash -s' +) +local DELETE_CMD_INPUT=$(cat << 'ENDSSH' ## The following lines are executed remotely function _logger { local value="${1}" # What to log - echo -e "$value" >> "$LOG_FILE" + #echo -e "$value" >> "$LOG_FILE" + echo -e "$value" >&2 # writing to STDERR because if [ $_SILENT -eq 0 ]; then echo -e "$value" @@ -2124,6 +2128,7 @@ $SSH_CMD ERROR_ALERT=0 sync_on_changes=$sync_on_changes _SILENT=$_SILENT _DEBUG= IFS=$'\r\n' for files in $(cat "$FILE_LIST") do + Logger "Processing file $files" "DEBUG" if [[ "$files" != "$previous_file/"* ]] && [ "$files" != "" ]; then if [ ! -d "$REPLICA_DIR$DELETE_DIR" ]; then $COMMAND_SUDO mkdir -p "$REPLICA_DIR$DELETE_DIR" @@ -2142,7 +2147,7 @@ $SSH_CMD ERROR_ALERT=0 sync_on_changes=$sync_on_changes _SILENT=$_SILENT _DEBUG= $COMMAND_SUDO rm -rf "$REPLICA_DIR$DELETE_DIR/$files" fi - if [ -e "$$REPLICA_DIR$files" ]; then + if [ -e "$REPLICA_DIR$files" ]; then # In order to keep full path on soft deletion, create parent directories before move parentdir="$(dirname "$files")" if [ "$parentdir" != "." ]; then @@ -2162,12 +2167,13 @@ $SSH_CMD ERROR_ALERT=0 sync_on_changes=$sync_on_changes _SILENT=$_SILENT _DEBUG= Logger "Deleting $REPLICA_DIR$files" "NOTICE" fi + Logger "Full path for deletion: ""$REPLICA_DIR$files" "DEBUG" if [ $_DRYRUN -ne 1 ]; then if [ -e "$REPLICA_DIR$files" ]; then $COMMAND_SUDO rm -rf "$REPLICA_DIR$files" if [ $? != 0 ]; then Logger "Cannot delete $REPLICA_DIR$files" "ERROR" - echo "$files" >> "$TARGET_STATE_DIR/$FAILED_DELETE_LIST" + echo "$files" >> "$FAILED_DELETE_LIST" fi fi fi @@ -2177,6 +2183,11 @@ $SSH_CMD ERROR_ALERT=0 sync_on_changes=$sync_on_changes _SILENT=$_SILENT _DEBUG= done IFS=$OLD_IFS ENDSSH +) +Logger "DELETE_CMD_INPUT: $DELETE_CMD_INPUT" "DEBUG" +Logger "DELETE_CMD: ${DELETE_CMD[*]}" "DEBUG" + + printf "%s" "$DELETE_CMD_INPUT" | ${DELETE_CMD[*]} > "$RUN_DIR/$PROGRAM.remote_deletion.$SCRIPT_PID" 2>&1 ## Copy back the deleted failed file list esc_source_file="$(EscapeSpaces "${TARGET[1]}${TARGET[3]}/$deleted_failed_list_file")"