#!/bin/bash # Usage info if [[ $# -lt 2 ]]; then echo "Usage: $0 {front|back|ext|extension} [folder]" exit 1 fi mode=$1 string=$2 folder=${3:-$(pwd)} # Ensure the folder exists if [[ ! -d "$folder" ]]; then echo "Error: '$folder' is not a valid directory." exit 1 fi # Process files for file in "$folder"/*; do [[ -f "$file" ]] || continue # skip non-files base="$(basename "$file")" # Split filename into name and extension (if any) name="${base%.*}" ext="${base##*.}" case "$mode" in front) # Add string to the front of the filename newname="${string}${base}" ;; back) # Add string before the extension (if present) if [[ "$base" == "$ext" ]]; then # no extension newname="${name}${string}" else newname="${name}${string}.${ext}" fi ;; ext|extension) # Add string *to* the extension (after a dot) if [[ "$base" == "$ext" ]]; then # file has no extension newname="${base}.${string}" else newname="${name}.${ext}${string}" fi ;; *) echo "Invalid mode: '$mode'. Use 'front', 'back', or 'ext/extension'." exit 1 ;; esac # Avoid renaming collisions if [[ "$newname" != "$base" ]]; then echo "Renaming: $base -> $newname" mv -n "$file" "$folder/$newname" fi done echo "✅ All applicable files in '$folder' have been renamed."