diff --git a/rename_multimedia.sh b/rename_multimedia.sh new file mode 100755 index 0000000..4a7c560 --- /dev/null +++ b/rename_multimedia.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +# Rename all image and video files in the current directory by their capture/creation date. + +set -euo pipefail +mkdir -p done + +# Directory to process (defaults to current directory) +DIR="${1:-.}" +cd "$DIR" + +# Supported extensions (add more if needed) +shopt -s nullglob nocaseglob +FILES=(*.jpg *.jpeg *.png *.mov *.mp4) +# FILES=(*.jpg *.jpeg *.png) + +for FILE in "${FILES[@]}"; do + # Skip if not a regular file + [ -f "$FILE" ] || continue + + # Extract datetime from EXIF or file creation date as fallback + DATE=$(exiftool -m -DateTimeOriginal -d "%Y-%m-%d %H-%M-%S" -s3 "$FILE" | head -n 1) + + # If EXIF data missing, fallback to filesystem creation/modification time + if [ -z "$DATE" ]; then + # The following lines need to be customized for the specific image names + continue + + # if [[ "$FILE" == *.jpg || "$FILE" == *.jpeg || "$FILE" == *.png ]]; then + # if [[ "$FILE" == IMG*WA* ]]; then + # DATE=$(echo $FILE | sed 's/IMG-//' | sed 's/-WA.*//') + # DATE="${DATE:0:4}-${DATE:4:2}-${DATE:6:2}" + # elif [[ "$FILE" == *" "*" "* ]]; then + # DATE=$(echo $FILE | awk '{print $1, $2}') + # else + # DATE="${FILE:0:4}-${FILE:4:2}-${FILE:6:2} ${FILE:8:2}-${FILE:10:2}-${FILE:12:2}" + # fi + # fi + # if [[ "$FILE" == *.mov || "$FILE" == *.mp4 ]]; then + # + # if [[ "$FILE" == *" "*" "* ]]; then + # DATE=$(echo $FILE | awk '{print $1, $2}') + # DATE=$(echo "20$DATE") + # elif [[ "$FILE" == VID*WA* ]]; then + # DATE=$(echo $FILE | sed 's/VID-//' | sed 's/-WA.*//') + # DATE="${DATE:0:4}-${DATE:4:2}-${DATE:6:2}" + # elif [[ "$FILE" == VID_* ]]; then + # DATE=$(echo $FILE | sed 's/VID_//' ) + # DATE="${DATE:0:4}-${DATE:4:2}-${DATE:6:2} ${DATE:9:2}-${DATE:11:2}-${DATE:13:2}" + # elif [[ "$FILE" =~ ^[0-9]+_[0-9]+\..*$ ]]; then + # DATE="${FILE:0:4}-${FILE:4:2}-${FILE:6:2} ${FILE:9:2}-${FILE:11:2}-${FILE:13:2}" + # elif [[ "$FILE" =~ ^[0-9]+\..*$ ]]; then + # DATE="${FILE:0:4}-${FILE:4:2}-${FILE:6:2} ${FILE:8:2}-${FILE:10:2}-${FILE:12:2}" + # else + # continue + # fi + # fi + fi + + # Extract extension (lowercase) + EXT="${FILE##*.}" + EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') + + NEWNAME="done/${DATE}.${EXT_LOWER}" + + # Handle duplicates (append counter) + COUNTER=1 + while [ -e "$NEWNAME" ]; do + NEWNAME="done/${DATE} $COUNTER.${EXT_LOWER}" + ((COUNTER++)) + done + + echo "Renaming: $FILE → $NEWNAME" + mv "$FILE" "$NEWNAME" +done