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
|
# Get filename
|
||||||
FILENAME=$(basename "$FILE_PATH")
|
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
|
# Construct target path
|
||||||
TARGET_PATH="minio/obsidian/${SUBPATH}/${FILENAME}"
|
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"
|
mc cp "$TARGET_PATH" "$BACKUP_PATH"
|
||||||
# User explicitly specified --rename
|
# User explicitly specified --rename
|
||||||
elif [ "$RENAME" = true ]; then
|
elif [ "$RENAME" = true ]; then
|
||||||
COUNTER=1
|
find_unique_filename "$FILENAME" "$SUBPATH"
|
||||||
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
|
|
||||||
# User explicitly specified --force
|
# User explicitly specified --force
|
||||||
elif [ "$FORCE" = true ]; then
|
elif [ "$FORCE" = true ]; then
|
||||||
echo "⚠️ Overwriting existing file: $TARGET_PATH"
|
echo "⚠️ Overwriting existing file: $TARGET_PATH"
|
||||||
@@ -173,28 +181,8 @@ if mc stat "$TARGET_PATH" >/dev/null 2>&1; then
|
|||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
r|R|rename)
|
r|R|rename)
|
||||||
COUNTER=1
|
find_unique_filename "$FILENAME" "$SUBPATH"
|
||||||
BASE_NAME="${FILENAME%.*}"
|
break
|
||||||
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
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid choice. Please enter o, s, b, or r"
|
echo "Invalid choice. Please enter o, s, b, or r"
|
||||||
|
|||||||
Reference in New Issue
Block a user