Um jeito não muito programático de achar arquivos duplicados no Linux

Eu estava com o seguinte problema:

No diretório X eu tinha 942 livros em PDF divididos em subdiretórios e no diretório Y eu tinha 2655 livros em PDF também distribuídos em vários diretórios.

Objetivo:

Encontrar os livros que são únicos no diretório X para que depois eu possa move-los para o diretório Y.

Fiz várias pesquisas na internet e não encontrei um jeito rápido e fácil de encontrar arquivos duplicados. Neste caso o que importa é o conteúdo do arquivo e não o nome do arquivo, pois um mesmo livro pode estar com nome diferente.

Resolvi implementar minha própria solução:

Executar o comando md5sum em cada arquivo para gerar a listagem com “hash” de todos os livros. Se o “hash” bater é 99.99999999% provável que o arquivo seja o mesmo.

Então vamos ao comando para gerar a lista com todos os MD5 dos livros do diretório X:

$ cd X
$ find . -type f -print0 | xargs -0 md5sum > /tmp/livrosX.txt

Repita este mesmo processo dentro do diretório Y:

$ cd Y
$ find . -type f -print0 | xargs -0 md5sum > /tmp/livrosY.txt

Abra o arquivo livrosX.txt no editor de texto (gedit.txt por exemplo) selecione todo o conteúdo (Ctrl+A) e copie (Ctrl+C). Então abra o programa Gnumeric e posicione o cursor na célula A2 e cole (Ctrl+V). Neste momento aparecerá a tela “Configuração de Importação de texto”, então marque a opção “Largura Fixa” e clique em Avançar”. Nesta tela aparecerá várias linhas com o MD5 e o caminho/nome do livro, então dê duplo clique no espaço que existe entre o MD5 e o nome do livro, serão criadas as Colunas 1 e 2. Então clique em “Fim”.

Repita este mesmo processo para o livrosY.txt, porém no momento de colocar o texto escolha a célula D2 ou invés da C2, pois deixaremos a coluna C para indicar se o livro é único ou não.

Agora clique na célula C2 e cole esta formula:

=if(iserror(match(A2;$D$2:$D$4000;0));"Unico";"Duplicado")

Posicione o cursor na borda inferior direita da célula C2, ele vai virar um pequena cruz, neste momento dê duplo clique sempre mover o mouse, espere alguns segundos e o Gnumeric automáticamente estende a formula para todas as demais linhas.

Não esqueça de colocar nomes aos campos (A1 = MD5, B1 = Nome do Livro, C1 = Unico ou Não?, D1 = MD5 e E1 = Nome do Livro).

Agora use o auto filtro (Dados -> Filtro -> Adicionar Auto Filtro) para listar apenas os nomes dos arquivos que são únicos.

Após gastar tempo escrevendo este post, resolvi refinar minha busca e pesquisar novamente por uma solução.

Este cara fez um script para fazer praticamente a mesma coisa que fiz, usando um script shell:
http://www.techrepublic.com/blog/linux-and-open-source/how-to-remove-duplicate-files-without-wasting-time/2667/

Este outro explica que existe uma ferramenta no Linux chamada fdupes que faz a mesma coisa:
http://forums.scotsnewsletter.com/index.php?showtopic=63146

Existe até mesmo uma ferramenta gráfica chamada FSlint que faz inclusive bem mais que achar arquivos duplicados, ela serve para corrigir nomes de arquivos entre outras coisas:
http://www.pixelbeat.org/fslint/

Outras dicas e opções podem ser encontradas neste site:
http://askubuntu.com/questions/3865/how-to-find-and-delete-duplicate-files

Moral da história: as vezes você precisa reinventar a roda para aprender como pesquisar no google pelas palavras certas. Era só eu ter pesquisado por “linux how to find and remove duplicate files based on its content” (risada do pica-pau triste he he heeeee).

Fonte da dica de formula para encontrar células repetidas numa planilha eletrônica: http://www.ablebits.com/office-addins-blog/2013/09/05/compare-two-columns-remove-duplicates/

Advertisements

4 thoughts on “Um jeito não muito programático de achar arquivos duplicados no Linux

  1. 😀

    Legal Hamilton, meu script-fu é praticamente 0!
    Ficou legal a sua solução, parabéns! Acho que na época que você fez isso o programa FSlint nem existia ainda, hehehe.

  2. Valeu por compartilhar, eu uso Fsflint, já usei o fdupes, mas sua dica ajuda as pessoas a criarem idéias para desenvolver suas próprias soluções, assim como eu prefiro meu programa que o de terceiros, e gostei de ler seu artigo que está muito bem explicado, aprofundado, com links, um artigo realmente de quem gosta de ajudar! Parabéns!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s