diff --git a/skills/minio-upload/scripts/upload_to_obsidian.sh b/skills/minio-upload/scripts/upload_to_obsidian.sh index e097bd7..2e71242 100755 --- a/skills/minio-upload/scripts/upload_to_obsidian.sh +++ b/skills/minio-upload/scripts/upload_to_obsidian.sh @@ -95,6 +95,36 @@ fi # Get filename FILENAME=$(basename "$FILE_PATH") +# Function to find unique filename by adding numeric suffix +# Sets global variables: TARGET_PATH, FILENAME +find_unique_filename() { + local original_filename="$1" + local subpath="$2" + local counter=1 + local base_name="${original_filename%.*}" + local ext="${original_filename##*.}" + + # Handle files without extension + if [ "$base_name" = "$ext" ]; then + base_name="$original_filename" + ext="" + else + ext=".$ext" + fi + + while true; do + local new_name="${base_name}-${counter}${ext}" + local new_target="minio/obsidian/${subpath}/${new_name}" + if ! mc stat "$new_target" >/dev/null 2>&1; then + TARGET_PATH="$new_target" + FILENAME="$new_name" + echo "📝 Renamed to: $FILENAME" + return 0 + fi + counter=$((counter + 1)) + done +} + # Construct target path TARGET_PATH="minio/obsidian/${SUBPATH}/${FILENAME}" @@ -116,29 +146,7 @@ if mc stat "$TARGET_PATH" >/dev/null 2>&1; then mc cp "$TARGET_PATH" "$BACKUP_PATH" # User explicitly specified --rename elif [ "$RENAME" = true ]; then - COUNTER=1 - BASE_NAME="${FILENAME%.*}" - EXT="${FILENAME##*.}" - - if [ "$BASE_NAME" = "$EXT" ]; then - # No extension - BASE_NAME="$FILENAME" - EXT="" - else - EXT=".$EXT" - fi - - while true; do - NEW_NAME="${BASE_NAME}-${COUNTER}${EXT}" - NEW_TARGET="minio/obsidian/${SUBPATH}/${NEW_NAME}" - if ! mc stat "$NEW_TARGET" >/dev/null 2>&1; then - TARGET_PATH="$NEW_TARGET" - FILENAME="$NEW_NAME" - echo "📝 Renamed to: $FILENAME" - break - fi - COUNTER=$((COUNTER + 1)) - done + find_unique_filename "$FILENAME" "$SUBPATH" # User explicitly specified --force elif [ "$FORCE" = true ]; then echo "⚠️ Overwriting existing file: $TARGET_PATH" @@ -173,28 +181,8 @@ if mc stat "$TARGET_PATH" >/dev/null 2>&1; then break ;; r|R|rename) - COUNTER=1 - BASE_NAME="${FILENAME%.*}" - EXT="${FILENAME##*.}" - - if [ "$BASE_NAME" = "$EXT" ]; then - BASE_NAME="$FILENAME" - EXT="" - else - EXT=".$EXT" - fi - - while true; do - NEW_NAME="${BASE_NAME}-${COUNTER}${EXT}" - NEW_TARGET="minio/obsidian/${SUBPATH}/${NEW_NAME}" - if ! mc stat "$NEW_TARGET" >/dev/null 2>&1; then - TARGET_PATH="$NEW_TARGET" - FILENAME="$NEW_NAME" - echo "📝 Renamed to: $FILENAME" - break 2 - fi - COUNTER=$((COUNTER + 1)) - done + find_unique_filename "$FILENAME" "$SUBPATH" + break ;; *) echo "Invalid choice. Please enter o, s, b, or r"