diff --git a/rename_multimedia.sh b/rename_multimedia.sh index 4a7c560..956db98 100755 --- a/rename_multimedia.sh +++ b/rename_multimedia.sh @@ -1,9 +1,9 @@ -#!/usr/bin/env bash +#!/bin/bash # Rename all image and video files in the current directory by their capture/creation date. set -euo pipefail -mkdir -p done +mkdir -p 'done' # Directory to process (defaults to current directory) DIR="${1:-.}" @@ -15,61 +15,61 @@ FILES=(*.jpg *.jpeg *.png *.mov *.mp4) # FILES=(*.jpg *.jpeg *.png) for FILE in "${FILES[@]}"; do - # Skip if not a regular file - [ -f "$FILE" ] || continue + # 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) + # 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 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 + # 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:]') + # Extract extension (lowercase) + EXT="${FILE##*.}" + EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') - NEWNAME="done/${DATE}.${EXT_LOWER}" + NEWNAME="done/${DATE}.${EXT_LOWER}" - # Handle duplicates (append counter) - COUNTER=1 - while [ -e "$NEWNAME" ]; do - NEWNAME="done/${DATE} $COUNTER.${EXT_LOWER}" - ((COUNTER++)) - done + # 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" + echo "Renaming: $FILE → $NEWNAME" + mv "$FILE" "$NEWNAME" done