Primeiramente, você terá que reordenar a primeira linha de comando para que a ordem dos arquivos encontrados pelo comando find seja mantida:
find . -size 20 ! -type d -exec cksum {} \; | tee /tmp/f.tmp | cut -f 1,2 -d ‘ ‘ | sort | uniq -d | grep -hif – /tmp/f.tmp > duplicates.txt
(Nota: para fins de teste na minha máquina eu usei find . -type f -exec cksum {} \;
)
Em segundo lugar, uma forma de imprimir todas, menos a primeira duplicada, é usar um arquivo auxiliar, digamos /tmp/f2.tmp
. Então poderíamos fazer algo como:
while read line; do
checksum=$(echo "$line" | cut -f 1,2 -d' ')
file=$(echo "$line" | cut -f 3 -d' ')
if grep "$checksum" /tmp/f2.tmp > /dev/null; then
# /tmp/f2.tmp already contains the checksum
# print the file name
# (printf is safer than echo, when for example "$file" starts with "-")
printf %s\n "$file"
else
echo "$checksum" >> /tmp/f2.tmp
fi
done < duplicates.txt
Apenas certifique-se de que /tmp/f2.tmp
exista e esteja vazio antes de executar isso, por exemplo, através dos seguintes comandos:
rm /tmp/f2.tmp
touch /tmp/f2.tmp
Espero que isso ajude =)