Considerando que você deve usar o MD5, e seus arquivos de entrada são conhecidos como hash collisions (igual a MD5 somas para arquivos binários diferentes), um truque que você pode usar é usar um SALT aleatório (uma string aleatória curta) eles, para fazer os checksums colidirem novamente.
Por exemplo,
#!/bin/bash
SALT=$(dd if=/dev/urandom status=none bs=1c count=128)
FILES=("f1" "f2" "f3" "f4" "f5");
for file in "${FILES[@]}"
do
echo $(echo $SALT | cat - "$file" | md5sum --binary | cut -d' ' -f1) $file
done
Isso calculará um hash MD5 para cada arquivo em FILES , adicionando um SALT de 128 bytes gerado aleatoriamente na mixagem, resultando em uma saída assim:
741eefc6c14d80ee38164a0961cfd200 f1
741eefc6c14d80ee38164a0961cfd200 f2
741eefc6c14d80ee38164a0961cfd200 f3
68441eb38393a75dee94ae089d528633 f4
68441eb38393a75dee94ae089d528633 f5
Se você executar isso novamente, receberá as diferentes somas de verificação (pois SALT será diferente), mas, no entanto, elas corresponderão aos arquivos duplicados:
bc2fdca1b765989b62e507711749c5b4 f1
bc2fdca1b765989b62e507711749c5b4 f2
bc2fdca1b765989b62e507711749c5b4 f3
a31019a6ace1f51b18920bb33d781c97 f4
a31019a6ace1f51b18920bb33d781c97 f5
Agora você pode simplesmente processar esta lista "MD5SUM file", para obter a lista de duplicatas.
E você também terá que adaptar isso para lidar com os dados de entrada em seu formato - vários \ 0 \ 0 grupos separados de, \ 0 nomes de arquivos separados. (Não vai tirar toda a diversão da sua tarefa).