Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Deduplicate. Works on BSD.
- # Port to GNU by replacing
- # -E with -regex-type posix-extended
- set -e
- if [ "$#" -ne 1 ]; then
- echo "usage: dedupe.sh <dir>"
- exit 2
- elif [ "$(uname)" != 'Darwin' ]; then
- echo "Only Mac supported, see comments"
- exit 2
- fi
- CKSUMS=$(find -E "$1" -type f \
- -iregex '.*\.(jpe?g|png)' \
- -exec cksum {} \; | sort -n)
- FILES=$(echo "$CKSUMS" | cut -d' ' -f3-)
- CRCS=$(echo "$CKSUMS" | cut -d' ' -f1)
- if [ "$(echo "$CRCS" | uniq -d)" = '' ]
- then
- echo "No duplicates"
- exit 0
- fi
- declare -a CK
- while IFS= read -r line; do
- CK+=( "$line" )
- done < <( echo "$CKSUMS" )
- N=${#CK[@]}
- for (( i=0; i<${N}-1; i++ ));
- do
- CRC1=$(echo "${CK[$i]}" | cut -d' ' -f1)
- CRC2=$(echo "${CK[$i+1]}" | cut -d' ' -f1)
- if [ "$CRC1" -eq "$CRC2" ]; then
- FN1=$(echo "${CK[$i]}" | cut -d' ' -f3-)
- FN2=$(echo "${CK[$i+1]}" | cut -d' ' -f3-)
- L1=$(basename "$FN1" | wc -c)
- L2=$(basename "$FN2" | wc -c)
- if [ "$L1" -gt "$L2" ]; then
- echo "Removing $FN1"
- rm -f "$FN1"
- else
- echo "Removing $FN2"
- rm -f "$FN2"
- fi
- fi
- done
Add Comment
Please, Sign In to add comment