Guest User

Untitled

a guest
Nov 18th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. #!/bin/bash
  2. # Deduplicate. Works on BSD.
  3. # Port to GNU by replacing
  4. # -E with -regex-type posix-extended
  5. set -e
  6. if [ "$#" -ne 1 ]; then
  7. echo "usage: dedupe.sh <dir>"
  8. exit 2
  9. elif [ "$(uname)" != 'Darwin' ]; then
  10. echo "Only Mac supported, see comments"
  11. exit 2
  12. fi
  13.  
  14. CKSUMS=$(find -E "$1" -type f \
  15. -iregex '.*\.(jpe?g|png)' \
  16. -exec cksum {} \; | sort -n)
  17.  
  18. FILES=$(echo "$CKSUMS" | cut -d' ' -f3-)
  19. CRCS=$(echo "$CKSUMS" | cut -d' ' -f1)
  20. if [ "$(echo "$CRCS" | uniq -d)" = '' ]
  21. then
  22. echo "No duplicates"
  23. exit 0
  24. fi
  25.  
  26. declare -a CK
  27. while IFS= read -r line; do
  28. CK+=( "$line" )
  29. done < <( echo "$CKSUMS" )
  30. N=${#CK[@]}
  31. for (( i=0; i<${N}-1; i++ ));
  32. do
  33. CRC1=$(echo "${CK[$i]}" | cut -d' ' -f1)
  34. CRC2=$(echo "${CK[$i+1]}" | cut -d' ' -f1)
  35. if [ "$CRC1" -eq "$CRC2" ]; then
  36. FN1=$(echo "${CK[$i]}" | cut -d' ' -f3-)
  37. FN2=$(echo "${CK[$i+1]}" | cut -d' ' -f3-)
  38. L1=$(basename "$FN1" | wc -c)
  39. L2=$(basename "$FN2" | wc -c)
  40. if [ "$L1" -gt "$L2" ]; then
  41. echo "Removing $FN1"
  42. rm -f "$FN1"
  43. else
  44. echo "Removing $FN2"
  45. rm -f "$FN2"
  46. fi
  47. fi
  48. done
Add Comment
Please, Sign In to add comment