Tenho um diretório com vários arquivos duplicados, criados por um programa. As duplicatas têm o mesmo nome (exceto por um número), mas nem todos os arquivos com o mesmo nome são duplicados.
O que é um comando simples para excluir as duplicatas (idealmente uma única linha limitada a GNU coreutils, ao contrário da pergunta sobre scripts )?
Exemplo de nome de arquivo:
parra1998.pdf
parra1998(1).pdf
parra1998(2).pdf
Uma solução rápida e suja é fazer hash dos arquivos, depois procurar os hashes que aparecem mais de uma vez e deletar aqueles cujo nome de arquivo é numerado.
Por exemplo:
sha1sum * > files.sha1sum cat files.sha1sum | cut -f1 -d" " | sort | uniq -c | grep -v " 1 " | sed --regexp-extended 's/^[^0-9]+[0-9] //g' | xargs -n1 -I§ grep § files.sha1sum | sed --regexp-extended 's/^[^ ]+ +//g' | grep -v '(' | xargs -n1 -I§ rm "§"