Refactor rename logic into reusable function
Extract duplicate rename code from --rename option and interactive 'r' branch into find_unique_filename() function. Reduces code duplication and improves maintainability. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user