diff --git a/rename_and_filter.sh b/rename_and_filter.sh index be1d3e6..f32448a 100755 --- a/rename_and_filter.sh +++ b/rename_and_filter.sh @@ -25,7 +25,7 @@ # Extension filter: # - Default: mp4 # - "*" : all files -# - "jpg" : only .jpg (with or without leading dot accepted, e.g., "jpg" or ".jpg") +# - "jpg" : only .jpg (with or without leading dot accepted, e.g. "jpg" or ".jpg") # # Logging: # RENAME: "old_name.ext" => "new_name.ext" @@ -78,7 +78,8 @@ rename_file() { # Guard: identical path, nothing to do if [[ "$src" == "$dst" ]]; then if (( DRY_RUN )); then - log "NOCHANGE (dry-run): \"$(basename "$src")\" (nothing to do)" + # CHANGE: add `--` so basename doesn't treat dash-prefixed names as options + log "NOCHANGE (dry-run): \"$(basename -- "$src")\" (nothing to do)" fi return 0 fi @@ -99,10 +100,12 @@ rename_file() { done if (( DRY_RUN )); then - log "RENAME: \"$(basename "$src")\" => \"$(basename "$candidate")\"" + # CHANGE: add `--` for safe logging + log "RENAME: \"$(basename -- "$src")\" => \"$(basename -- "$candidate")\"" else mv -v -- "$src" "$candidate" >/dev/null - log "RENAME: \"$(basename "$src")\" => \"$(basename "$candidate")\"" + # CHANGE: add `--` for safe logging + log "RENAME: \"$(basename -- "$src")\" => \"$(basename -- "$candidate")\"" fi } @@ -182,7 +185,8 @@ strip_reserved() { local base ext token lw local -a parts new_parts=() - base="$(basename "$name")" + # CHANGE: pass `--` to basename for dash-prefixed names + base="$(basename -- "$name")" ext="" if [[ "$base" == *.* ]]; then ext=".${base##*.}" @@ -243,15 +247,21 @@ fi for path in "$DIR"/$pattern; do [[ -f "$path" ]] || continue - orig_basename="$(basename "$path")" + orig_basename="$(basename -- "$path")" - # 1) remove reserved tokens from basename - stripped="$(strip_reserved "$orig_basename")" + # NEW RULE (minimal): remove ALL leading dashes before processing + clean_basename="$orig_basename" + while [[ "$clean_basename" == -* ]]; do + clean_basename="${clean_basename#-}" + done + + # 1) remove reserved tokens from basename (on the cleaned name) + stripped="$(strip_reserved "$clean_basename")" # 2 & 3) normalize (spaces -> "_", collapse "_", trim) new_name="$(normalize_name "$stripped")" - # NEW: If nothing changed, do not attempt to rename at all + # If nothing changed, do not attempt to rename at all if [[ "$new_name" == "$orig_basename" ]]; then if (( DRY_RUN )); then log "NOCHANGE (dry-run): \"${orig_basename}\" (nothing to do)"