65 lines
1.6 KiB
Bash
Executable File
65 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Usage info
|
|
if [[ $# -lt 2 ]]; then
|
|
echo "Usage: $0 {front|back|ext|extension} <string> [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."
|