Você tem
$ tree
.
|-- A
| |-- a.txt
| |-- b.txt
| '-- c.txt
'-- B
|-- a.txt
|-- b.txt
'-- c.txt
2 directories, 6 files
Usando fdupes :
$ fdupes -1 A B
A/b.txt B/b.txt
fdupes detecta duplicatas com base no conteúdo do arquivo. O sinalizador -1 faz com que ele exiba os nomes de arquivos de cada conjunto de duplicatas em uma única linha. Aqui, ele detecta que os arquivos b.txt são idênticos.
Você pode usar fdupes para excluir duplicatas:
$ fdupes --delete A B
[1] A/b.txt
[2] B/b.txt
Set 1 of 1, preserve files [1 - 2, all]: 1
[+] A/b.txt
[-] B/b.txt
Ele interativamente pergunta qual arquivo manter (ou manter ambos). Eu escrevi 1 , então o arquivo A/b.txt foi mantido enquanto B/b.txt foi deletado.
Consulte o manual para fdupes ( man fdupes ). Se não estiver instalado em seu sistema, use um gerenciador de pacotes para instalá-lo. Ele também pode ser feito para excluir automaticamente os arquivos sem a solicitação interativa, mas é preciso ter cuidado ao executá-lo dessa maneira. Sempre faça um backup dos seus dados antes de executar um comando que possa excluir arquivos.
Observe que fdupes sempre manterá pelo menos um dos duplicados. Se você deseja excluir todas as duplicatas, talvez esteja interessado nesta versão corrigida de fdupes mencionada em uma resposta a uma pergunta semelhante feita em SuperUser: link (eu não testei isso).
O motivo pelo qual sugiro usar fdupes em vez de analisar o arquivo de log que você tem é que os nomes de arquivo incorporados em um documento de texto são difíceis de analisar corretamente. Pode não ser sempre difícil (e neste exemplo em particular, seria fácil), mas note que o Unix permite tanto espaços quanto novas linhas nos nomes de arquivos e diretórios. É tecnicamente possível ter um diretório chamado
a.txt
Same: A=
com uma nova linha incorporada no nome.