ask before writing changes

This commit is contained in:
Danilo Reyes 2024-07-16 13:02:18 -06:00
parent d0af37ab9c
commit 2940ebb16d

View File

@ -4,6 +4,7 @@
# Directory to start the search
base_dir=~/Pictures/Photos/Camera
log_file="metadata_changes.log"
temp_file="metadata_changes_temp.log"
# Function to extract date and time from filename
extract_datetime_from_filename() {
@ -21,6 +22,8 @@ extract_datetime_from_filename() {
datetime="${BASH_REMATCH[1]:0:4}:${BASH_REMATCH[1]:4:2}:${BASH_REMATCH[1]:6:2} ${BASH_REMATCH[2]:0:2}:${BASH_REMATCH[2]:2:2}:${BASH_REMATCH[2]:4:2}"
elif [[ "$filename" =~ ([0-9]{8}) ]]; then
datetime="${BASH_REMATCH[1]:0:4}:${BASH_REMATCH[1]:4:2}:${BASH_REMATCH[1]:6:2} 00:00:00"
elif [[ "$filename" =~ ([0-9]{4})-([0-9]{2})-([0-9]{2})\ ([0-9]{2})_([0-9]{2})_([0-9]{2}) ]]; then
datetime="${BASH_REMATCH[1]}:${BASH_REMATCH[2]}:${BASH_REMATCH[3]} ${BASH_REMATCH[4]}:${BASH_REMATCH[5]}:${BASH_REMATCH[6]}"
elif [[ "$filename" =~ ([0-9]{4})-([0-9]{2})-([0-9]{2}) ]]; then
datetime="${BASH_REMATCH[1]}:${BASH_REMATCH[2]}:${BASH_REMATCH[3]} 00:00:00"
fi
@ -57,10 +60,10 @@ log_change() {
photo="$1"
old_date="$2"
new_date="$3"
echo "File: $photo" >> "$log_file"
echo " Old Date: $old_date" >> "$log_file"
echo " New Date: $new_date" >> "$log_file"
echo "" >> "$log_file"
echo "File: $photo" >> "$temp_file"
echo " Old Date: $old_date" >> "$temp_file"
echo " New Date: $new_date" >> "$temp_file"
echo "" >> "$temp_file"
}
# Loop through each year directory
@ -89,15 +92,13 @@ for year_dir in "$base_dir"/*/; do
if [ -n "$filename_datetime" ]; then
new_date="$filename_datetime"
log_change "$photo" "No date metadata" "$new_date"
echo "Updating date for: $photo"
echo "Found: $photo"
echo " Extracted date from filename: $new_date"
# exiftool -overwrite_original -DateTimeOriginal="$new_date" "$photo"
else
new_date="$year:$month:01 00:00:00"
log_change "$photo" "No date metadata" "$new_date"
echo "Updating date for: $photo"
echo "Found: $photo"
echo " Defaulting to directory date: $new_date"
# exiftool -overwrite_original -DateTimeOriginal="$new_date" "$photo"
fi
else
photo_year=$(echo "$photo_date" | cut -d':' -f1)
@ -126,8 +127,7 @@ for year_dir in "$base_dir"/*/; do
echo " Directory date: $year/$month"
echo " Photo date: $photo_date"
echo " Filename date: $filename_datetime"
echo " Updating photo metadata to match filename date."
# exiftool -overwrite_original -DateTimeOriginal="$new_date" "$photo"
echo " Suggested action: Update photo metadata to match filename date."
fi
else
echo "Mismatch found: $photo"
@ -142,9 +142,23 @@ for year_dir in "$base_dir"/*/; do
done
# Ask for confirmation before proceeding to the next year
read -p "Finished processing year $year. Do you want to continue to the next year? (y/n): " response
read -p "Finished processing year $year. Do you want to save the changes and continue to the next year? (y/n): " response
if [[ "$response" != "y" ]]; then
echo "Stopping script."
rm -f "$temp_file"
exit 0
else
# Apply changes and save log
while IFS= read -r line; do
if [[ "$line" == File:* ]]; then
photo=$(echo "$line" | cut -d' ' -f2-)
elif [[ "$line" == " New Date:"* ]]; then
new_date=$(echo "$line" | cut -d' ' -f3-)
echo exiftool -overwrite_original -DateTimeOriginal="$new_date" "$photo"
fi
done < "$temp_file"
cat "$temp_file" >> "$log_file"
rm -f "$temp_file"
fi
done