# Check if we found any images if [ ${#images[@]} -eq 0 ]; then echo "No images found." exit 1 fi MAX_SIZE_for_array=1000 a_skips=() truncate_array() { local -n arr_ref=$1 # Nameref (Bash 4.3+) local max_size=$2 local array_length=${#arr_ref[@]} if [ $array_length -gt $max_size ]; then # echo "Array too large ($array_length)" #arr_ref=("${arr_ref[@]:0:$max_size}") # Keep oldest data arr_ref=("${arr_ref[@]:1}") # POP First (Shift) # unset arr_ref[${#arr_ref[@]}-1] # POP LAST fi } # Outer loop for ((i = 0; i < ${#images[@]}; i++)); do outer_image="${images[$i]}" skip_outer=false # Reset flag for each outer loop iteration for skip in "${a_skips[@]}"; do if [ "$path/$skip" = "$path/$outer_image" ]; then skip_outer=true break fi done # Skip to next outer iteration if flagged if [ "$skip_outer" = true ]; then continue fi # Inner loop (only later images to avoid double-checks) for ((j = i + 1; j < ${#images[@]}; j++)); do inner_image="${images[$j]}" skip_inner=false # Reset flag for each inner loop iteration for skip in "${a_skips[@]}"; do if [ "$path/$skip" = "$path/$inner_image" ]; then skip_inner=true break fi done # Skip to next inner iteration if flagged if [ "$skip_inner" = true ]; then continue fi echo -e "\nComparing files: $outer_image TO $inner_image" python3 dedup.py "$path/$outer_image" "$path/$inner_image" "$2" exit_code=$? case $exit_code in 1) # Duplicate found echo "$path/$outer_image # $inner_image" >> dups.txt if [ $do_for_real = true ]; then mv "$path/$outer_image" "$path/dups" fi break ;; 2) # Close match echo "$path/$outer_image # $inner_image" >> alike.txt break ;; 3) # Skip with size issues inner image echo "$path/$inner_image" >> size.txt a_skips+=("$inner_image") truncate_array a_skips $MAX_SIZE_for_array ;; 4) # Skip invalid inner image echo "$path/$inner_image" >> invalid.txt a_skips+=("$inner_image") truncate_array a_skips $MAX_SIZE_for_array ;; 5) # Same GPS echo "$path/$outer_image # $inner_image" >> sameGPS.txt break ;; 6) # Same GPS within feet echo "$path/$outer_image # $inner_image" >> sameGPSfeet.txt break ;; 8) # Invalid outer image echo "$path/$outer_image" >> invalid.txt if [ $do_for_real = true ]; then echo "To remove bad image run: rm $path/$outer_image" fi break ;; 9) # Image size issue echo "$path/$outer_image" >> size.txt break ;; esac done done # echo "${a_skips[@]}"