Note que eu uso o shell zsh.
Tente algo como o seguinte (não testado; com base no link ):
# checksum everything in ${DIR}
cksums=$(mktemp)
find ${DIR} -xdev -type f -print0 | xargs -0 md5sum > $cksums
# loop through each md5 hash found
for hash in $(sort $cksums | uniq -w 32 -d | cut -c 1-32); do
# list of files with this hash
files=$(grep $hash $cksums | cut -c 35-)
f=(${(f)files})
unset files
# $f now contains array of files with the same checksum
# compare the first file to the rest, deleting any that are older
newest=$f[1]
for file in $f[2,-1]; do
# make sure the files are still the same
cmp $newest $file || continue
# remove the older file
if [[ $file -nt $newest ]]; then
rm $newest
newest=$file
else
rm $file
fi
done
done
Não foi testado, mas deve ajudá-lo a maior parte do caminho. Deixe-me saber se alguma coisa precisar de mais explicações.