#!/bin/bash # Copyright (c) 2025 by Robert Strutts # License: MIT source myenv/bin/activate # Check if the first argument is a directory if [ ! -d "$1" ]; then echo "Error: '$1' is not a directory." exit 1 fi # Get list of images shopt -s nullglob pushd "$1" || exit 1 images=(*.jpg *.png) popd || exit 1 # Check if we found any images if [ ${#images[@]} -eq 0 ]; then echo "No images found." exit 1 fi # Outer loop for ((i = 0; i < ${#images[@]}; i++)); do outer_image="${images[$i]}" # Inner loop (only later images to avoid double-checks) for ((j = i + 1; j < ${#images[@]}; j++)); do inner_image="${images[$j]}" echo -e "\nCompairing files: $outer_image TO $inner_image" python3 dedup.py "$1/$outer_image" "$1/$inner_image" "$2" exit_code=$? if [ $exit_code -eq 1 ]; then echo "$1/$outer_image # $inner_image" >> dups.txt break # No need to check more once found duplicate fi if [ $exit_code -eq 2 ]; then echo "$1/$outer_image # $inner_image" >> alike.txt break # No need to check more once found close match to duplicate fi if [ $exit_code -eq 4 ]; then break # Skip Invaild inner Image fi if [ $exit_code -eq 5 ]; then echo "$1/$outer_image # $inner_image" >> sameGPS.txt break # No need to check more once found matching GPS image fi if [ $exit_code -eq 6 ]; then echo "$1/$outer_image # $inner_image" >> sameGPSmile.txt break # No need to check more once found matching GPS image fi if [ $exit_code -eq 8 ]; then echo "$1/$outer_image" >> invalid.txt break # No need to check more once found bad image fi if [ $exit_code -eq 9 ]; then echo "$1/$outer_image" >> size.txt break # No need to check more once found image too Small or Large fi done done