Ну, во-первых, стоит перейти на нормальный механизм поиска дубликатов вроде fdupes.
Ваш метод читает все файлы целиком, а обычно бОльшую часть файлов можно исключить из сравнения просто по размеру, да ещё и не застрахован от коллизий.
Для хардлинкования одинаковых файлов из вывода fdupes я некогда написал скрипт
#!/bin/bash
MAINFILE=''
declare -i n=0
while read FILE; do
if [ -z "$FILE" ]; then
MAINFILE=''
else
if [ -z "$MAINFILE" ]; then
MAINFILE="$FILE"
n+=1
echo "$n $MAINFILE"
else
ln -f "$MAINFILE" "$FILE"
fi
fi
done
Не применять бездумно, это чревато! Поэкспериментируйте с fdupes, осознайте, что происходит в скрипте, после этого, я уверен, вы сможете решить свою задачу
