Detector de Duplicatas

49 respostas
M

Olá,

Com base em alguns algoritmos aqui do fórum (em especial alguns postados pelo thingol para cálculo de hash de arquivos), criei um programa que encontra arquivos duplicados no computador. Para baixar clique aqui.

EDIT (14/03/10):

Versão 0.1.0:

:arrow: Suporte a filtros (mais sugestões para filtros padrão?)
:arrow: Melhoria significativa de performance

EDIT (13/03/10):

Versão 0.0.5:

:arrow: Suporte a propriedades
:arrow: Modo debug melhorado (com opção para ativar/desativar via GUI)

EDIT (08/03/10):

Versão 0.0.4:

:arrow: Sistema de log (o programa cria um arquivo na pasta pessoal onde pode ser definido se ele rodará em modo debug ou não; o log será feito na saída padrão e em um arquivo na pasta temporária; aviso: se o modo debug estiver ativado o arquivo de log gerado pode ser extremamente grande!)

EDIT (07/03/10):

Versão 0.0.3:

:arrow: Problema de internacionalização corrigido (veja o problema número 1 no site)
:arrow: Suporte a look and feels (até agora Metal, Nimbus e o do sistema)
:arrow: Internacionalização do conteúdo de ajuda

EDIT (05/03/10):

Versão 0.0.2:

:arrow: Suporte a internacionalização (até agora está em português e em inglês)
:arrow: Mudança de gerenciador de leiaute para o MigLayout
:arrow: Correção de alguns bugs em potencial
:arrow: Refatoração no código

Até o momento, o programa:

:arrow: Suporta múltiplos diretórios
:arrow: Usa um algoritmo que leva em conta o tamanho do arquivo, o seu conteúdo (lê os primeiros bytes) e calcula seus respectivos hashs
:arrow: Informações detalhadas sobre as duplicatas
:arrow: É possível, através da interface do programa abrir o arquivo, abrir a pasta onde ele está ou apagá-lo

Execute-o e fique impressionado com a quantidade de arquivos duplicados que há no seu computador. :slight_smile:

A página do projeto é: http://code.google.com/p/duplicatedetector/

Link direto para download do executável: http://duplicatedetector.googlecode.com/files/duplicatedetector-0.1.0.zip

O projeto está licenciado sob GNU GPL 3, é versionado sob SVN e usa o Maven para controlar diferentes distribuições/versões. Quem tiver sugestões, elogios, reclamações, reportar bugs… o que for: por favor, postem aqui. Quem quiser também pode me mandar um patch para alguma nova função ou para a correção de um bug.

Espero feedback!

Obrigado pessoal.

49 Respostas

A

Muito boa iniciativa, Marco! Acredito que uma computação melhor se dará quando todos compartilharem assim as próprias iniciativas (seja com grandes aplicações ou pequenos trechos de código).

Mais uma vez, parabéns!

[]´s

M

asaudate:
Muito boa iniciativa, Marco! Acredito que uma computação melhor se dará quando todos compartilharem assim as próprias iniciativas (seja com grandes aplicações ou pequenos trechos de código).

Mais uma vez, parabéns!

[]´s


Obrigado! :slight_smile:

Também penso assim: a ajuda mútua faz com que todos cresçam e melhorem sempre. E isso é muito legal!

F

Existe um software que faz isso talvez vc possa implementar alguma coisa com base nele.

http://www.moleskinsoft.com/

Abraço,

M

fre_d:
Existe um software que faz isso talvez vc possa implementar alguma coisa com base nele.

http://www.moleskinsoft.com/

Abraço,


Obrigado pelo comentário. Já retirei algumas ideias e estou atualizando a lista TODO.

Mais alguém?

M

Nova versão lançada!

K

Olá Marco…
Gostei bastante de sua ferramenta, realmente é possível abrir os arquivos antes de eliminá-los sem precisar sair da página do programa, a visualização dos arquivos é rápida, ele abre tanto imagens quanto qualquer tipo de programa, eu tinha inclusive alguns códigos java repetidos, muito bom, eu fiquei um bom tempo excluindo muita coisa de minha máquina…
Vou indicar para amigos…

Sucesso…

F

Realmente interessante, rodei aqui no ubuntu /home … fail, culpa minha eu acho, na verdade ficou vasculhando pacas ai cancelei :shock: :shock: :shock:

depois botei numa pasta menor, achou um monte de *.java.svn-base

M

Bom saber… talvez haja algum problema aí. Ele ao menos indicou alguma informação de progresso ou simplesmente “empacou”?

fredferrao:

depois botei numa pasta menor, achou um monte de *.java.svn-base

É que quando você faz um checkout de um repositório SVN algumas pastas ocultas guardam cópias dos arquivos originais (gerando portanto duplicatas). Talvez, numa próxima versão, isso possa ser explicitado melhor (ou nem seja incluído como duplicata).

M

Kleber Antonioli:
Olá Marco…
Gostei bastante de sua ferramenta, realmente é possível abrir os arquivos antes de eliminá-los sem precisar sair da página do programa, a visualização dos arquivos é rápida, ele abre tanto imagens quanto qualquer tipo de programa, eu tinha inclusive alguns códigos java repetidos, muito bom, eu fiquei um bom tempo excluindo muita coisa de minha máquina…
Vou indicar para amigos…

Sucesso…


Obrigado. E quem mais puder divulgar, eu agradeço.

M

Mais uma versão pessoal! Mudanças descritas no primeiro post.

M

Curti chara, e realmente tem muita coisa duplicada no meu PC.

Juro que a 1° vez que vi o tópico eu pensei que fosse “duplicatas” bancarias.

Mas agora entendi o seu projeto e gostei.

F

Bom saber… talvez haja algum problema aí. Ele ao menos indicou alguma informação de progresso ou simplesmente “empacou”?

fredferrao:

depois botei numa pasta menor, achou um monte de *.java.svn-base

A app não travou, mas empacou, ficou ali um tempão com o progresso indeterminado, com a frase vasculhando pastas…

M

Mark_Ameba:
Curti chara, e realmente tem muita coisa duplicada no meu PC.

Juro que a 1° vez que vi o tópico eu pensei que fosse “duplicatas” bancarias.

Mas agora entendi o seu projeto e gostei.


Realmente o nome é ambíguo… :-o

M

Bom saber… talvez haja algum problema aí. Ele ao menos indicou alguma informação de progresso ou simplesmente “empacou”?

fredferrao:

depois botei numa pasta menor, achou um monte de *.java.svn-base

A app não travou, mas empacou, ficou ali um tempão com o progresso indeterminado, com a frase vasculhando pastas…
Então deve ter muito arquivo… estou modificando algumas coisas para que haja mais detalhes do que está sendo feito (entre essas coisas um sistema de log que informa cada arquivo que está sendo processado). Se realmente houver algum bug isso tornará mais fácil de identificar.

Obrigado pelo feedback, em breve sai a nova versão com logs.

M

Mais uma versão, agora com suporte a logs. Talvez ajude a identificar possíveis bugs. Mais detalhes no primeiro comentário.

P

Rodei no pc do meu irmao (windows xp)
Para windows ainda prefiro o CloneRemover (http://www.moleskinsoft.com/)
Mas ele não funciona em linux (eu uso ubuntu), esse eh o diferencial seu…
E outra, o Moleskinsfot Clone Remover nao eh gratis! (mais um diferencial)
E outra: No seu agente ainda tem o código-fonte! kkkkk

Continua investindo nisso, e procura melhorar algumas coisas para o funcionamento no ubuntu…
Fora isso o projeto ta otimo!

M
<blockquote><div class="quote-author">pedroroxd:</div>Rodei no pc do meu irmao (windows xp)

Para windows ainda prefiro o CloneRemover (<a href="http://www.moleskinsoft.com/">http://www.moleskinsoft.com/</a>)

</blockquote>

Pois é… estou tomando algumas características desse programa como base para novas funções. Se tudo der certo, em breve estará tão bom quanto!

Mas ele não funciona em linux (eu uso ubuntu), esse eh o diferencial seu…

E outra, o Moleskinsfot Clone Remover nao eh gratis! (mais um diferencial)

E outra: No seu agente ainda tem o código-fonte! kkkkk[/quote]

Aí que estão os principais diferenciais mesmo.

pedroroxd:
Continua investindo nisso, e procura melhorar algumas coisas para o funcionamento no ubuntu…
Fora isso o projeto ta otimo!

Obrigado, estou trabalhando no projeto! Mas o que você quer dizer “melhorar algumas coisas para o funcionamento no ubuntu”? Não funciona no Ubuntu?!?

P

Funciona, mas fica mais lerdo…
Até no Windows Xp por exemplo, quando eu mandei examinar o C: inteiro, ele demorou varios minutos, fiquei até com preguiça e fechei…
Você pode colocar mais threads trabalhando simultaneamente, para diminuir o tempo…
E também colocar lá (eu axo legal): Escaniar o computador inteiro, onde ele irá scaniar todas as partições…

São só sujestões, o projeto é seu, foi muito bem elaborado, e vc merece todo o crédito!
GoGogO!

M

pedroroxd:
Funciona, mas fica mais lerdo…
Até no Windows Xp por exemplo, quando eu mandei examinar o C: inteiro, ele demorou varios minutos, fiquei até com preguiça e fechei…

Entendi… é que o programa realiza basicamente 3 etapas:

  1. Vasculha todos os diretório recursivamente procurando por arquivos (ele ignora os links) e armazena o tamanho do arquivo e um objeto File em um Map.
  2. Após remover todas as entradas onde o tamanho corresponde a um único arquivo, o programa lê os 50 primeiros bytes de cada arquivo e armazena essas informações em um segundo Map.
  3. Agora removemos todas as entradas cujos bytes sejam de um único arquivo e calculamos o hash para os que sobraram.

Acontece que cada uma das operações leva tempo (bastante tempo…). Sem contar que um computador comum tem centenas de milhares (ou até milhões) de arquivos, o que faz escanear a partição inteira algo quase inviável (só para ter ideia, digite um “dir /s” no ‘C:’ do Windows ou um “ls -lR” no ‘/’ do Linux).

Isso é verdade, está nos planos mas não para curto prazo.

Vide comentário acima. Eu acho inviável. Sem contar que escanear pastas de sistema que costumam ter vários arquivos duplicados é pouco útil, já que remover algum desses arquivos pode quebrar seu sistema. Uma boa ideia seria um atalho rápido para escanear a pasta pessoal, por exemplo.

Sugestões são muito bem vindas, obrigado!

M

Nova versão: 0.0.5.

Vide comentário inicial do tópico pessoal!

M

Ahh… só um comentário pessoal: vários já informaram que se o programa rodar em pastas com muitos arquivos ele simplesmente impaca.

Isso é “normal” (pelo menos por enquanto no modo single-thread) devido ao que foi explicado dois comentários acima.

A melhora desse ponto está planejada, mas para médio prazo pois portar o programa para multi-thread não é uma tarefa muito trivial (quem sabe com a nova API de programação paralela do Java 7 isso seja menos complicado de fazer).

Por enquanto é possível obter mais informações sobre o que está acontecendo ativando o modo debug que mostra na saída padrão cada operação que está sendo feita. É recomendável executar o programa somente em diretórios não muito grandes por hora.

De qualquer forma, espero feedback e, caso esse problema esteja realmente atrapalhando, a prioridade da solução será aumentada.

P

Hehe
Entendi…

Mas axo que trabalhando com várias threads todos os problemas vão se resolver…
Mas é meio fod@ msmo, trabalhar simultaneamente…
Vo baixar a nova versão…

Legal é que estou lendo e entendo o código =D

M

Que bom! Significa que você tem facilidade para entender e que o código está legível. :slight_smile:

M

Nova versão! Mudando para linha 0.1.

Nessa versão há suporte a filtros (via expressões regulares por enquanto) e foi feita uma alteração na lógica do programa que melhorou razoavelmente o desempenho.

Espero mais feedback quando ao desempenho do programa e sugestões para filtros que podem ser definidos como padrão (além dos que já estão lá).

F

Eu estou usando uma versão free desse

http://www.2brightsparks.com/syncback/syncback-hub.html

É muito bom !!!

P

marcobiscaro2112:
Nova versão! Mudando para linha 0.1.

Nessa versão há suporte a filtros (via expressões regulares por enquanto) e foi feita uma alteração na lógica do programa que melhorou razoavelmente o desempenho.

Espero mais feedback quando ao desempenho do programa e sugestões para filtros que podem ser definidos como padrão (além dos que já estão lá).


Opaaaa
Legal…
Bom ver que você ta empolgado e atualizando diariamente =)

R

mto bom
pelo que to vendo…

vo baixa pra usa!

nao sei se seria interessante
mais no mesmo software vc integrar outras funcionalidades…
tipo esses softwares aqui http://www.velasco.com.br/softwares.php
são MTO MTO MTO Bons…
(ja usei quase todos… e todos que usam nao deixam a desejar)

apenas uma opnião!

abraço

E

A menos que você esteja varrendo vários discos ao mesmo tempo, não vale a pena tornar o programa multi-threaded. É que seu limitante é a velocidade do disco, não a CPU. E no seu caso, se você ficar abrindo e vasculhando vários arquivos ao mesmo tempo no mesmo disco, a menos que os tais arquivos sejam muito pequenos ou se o sistema operacional souber lidar com várias solicitações ao mesmo tempo em vários arquivos ao mesmo tempo, talvez você torne seu programa mais lento, não mais rápido.

M

Então, eu estava fazendo umas análises de desempenho e percebi que antes a utilização de disco estava muito baixa, por isso pensei que varias threads acelerariam o processo. Porém isso estava acontecendo por um problema na hora da leitura (o buffer estava excessivamente pequeno e isso deixava o consumo de CPU médio e a utilização de disco baixa). Agora que está resolvido eu realmente não pretendo partir para multi-thread.

G

Muito boa ferramenta. Útil e pretendo usá-la com frequência. Realmente está um pouco lenta, mas você poderia dar uma revisada no seu algoritmo, ou quem sabe postá-lo em pseudo-código para que possamos dar alguma sugestão.

P

Se você baixou, deve ver que o código-fonte está incluido =P

S

Então, eu estava fazendo umas análises de desempenho e percebi que antes a utilização de disco estava muito baixa, por isso pensei que varias threads acelerariam o processo. Porém isso estava acontecendo por um problema na hora da leitura (o buffer estava excessivamente pequeno e isso deixava o consumo de CPU médio e a utilização de disco baixa). Agora que está resolvido eu realmente não pretendo partir para multi-thread.

Se o consumo de CPU ainda estiver baixo pode valer a pena inserir mas threads como vc escreveu. Se você quiser fazer a busca em mais de um disco, talvez ter uma thread para cada disco seja interessante.

Tem um exemplo do Java concurrency in practice que é exatamente um indexador de uma “desktop search”. se quiser dar uma olhada.

http://www.javaconcurrencyinpractice.com/listings/ProducerConsumer.java

(Dicas de quem ainda não baixou o programa :slight_smile: ).

R

Eu tenho uma dica, e espero que não a considere ofensiva!
Testei o programa e ele retorna a seguinte mensagem:

Arquivos disperdiçados: …

Mas desperdício se escreve com E!

Abraço!

P

kkk
já tinha notado isso também…
Mas primeiro tem que cuidar dos erros de programação, desempenho, etc… e depois dos erros ortográficos! (não que eles não sejam importantes)
=P

R

pedroroxd:
kkk
já tinha notado isso também…
Mas primeiro tem que cuidar dos erros de programação, desempenho, etc… e depois dos erros ortográficos! (não que eles não sejam importantes)
=P

Eu diria que se o usuário é da área de TI, de fato ele vai se preocupar mais com bugs, desempenho etc.

Mas se ele for um usuário leigo (e este aplicativo certamente é do interesse de muita gente que não é do mundo de TI), então ele vai medir a credibilidade do software principalmente pela interface gráfica!

U

Muito bom o programa marcobiscaro2112.
Baixei e testei!
Parabéns!

Só quero saber se os arquivos encontrados são enviados para você?
rsrs :smiley: :smiley:
PS. Só vi link agora em sua assinatura!
:thumbup:

vlw
abs

R

Eu gostaria de ver o fonte do seu projeto. Mas baixei do googlecode e só veio os .class. Onde estão disponíveis os fontes?

M

Pessoal, desculpe pela demora para responder, é que por algum motivo não os recebi e-mails de notificação quando vocês postaram aqui.

rod.attack:
Eu tenho uma dica, e espero que não a considere ofensiva!
Testei o programa e ele retorna a seguinte mensagem:

Arquivos disperdiçados: …

Mas desperdício se escreve com E!

Abraço!


Ofensivo? De forma alguma… pelo contrário: muito obrigado. É nessas horas que falta um corretor ortográfico bom em português no Eclipse… Anotado, vai ser arrumado.

M

rod.attack:
pedroroxd:
kkk
já tinha notado isso também…
Mas primeiro tem que cuidar dos erros de programação, desempenho, etc… e depois dos erros ortográficos! (não que eles não sejam importantes)
=P

Eu diria que se o usuário é da área de TI, de fato ele vai se preocupar mais com bugs, desempenho etc.

Mas se ele for um usuário leigo (e este aplicativo certamente é do interesse de muita gente que não é do mundo de TI), então ele vai medir a credibilidade do software principalmente pela interface gráfica!


Verdade. Por isso que estou tomando cuidado para deixá-la bem limpa e o mais usável possível. Por isso mesmo toda a ajuda (seja com comentários, com correções, com código…) é muito bem vinda.

M

Não disponibilizei um arquivo com os fontes ainda para baixar. Só está disponível por enquanto via SVN no Google Code.

M

Erro de português corrigido no trunk. Próxima versão já sai correta.

P

Tanto tempo sem entrar no guj…
Mas jah baxei o detector =)

G

Achei interessante, e é sem dúvida bem funcional.

Há uma coisinha chata nele que é o ‘update’ da JTree, quando você apaga um item duplicado, ele da collapse na tree, mas realmente não é tão trivial assim de fazer a atualização da parte específica, mas até vou ver se consigo fazer algum exemplo assim e lhe passar depois.

Eu também tenho vários projetos pessoais pequenos, que uso para atender as minhas necessidades, mas pretendo publicar um ou outro, às vezes pode ser útil e interessante para as outras pessoas.

M

Grinvon:
Achei interessante, e é sem dúvida bem funcional.

Há uma coisinha chata nele que é o ‘update’ da JTree, quando você apaga um item duplicado, ele da collapse na tree, mas realmente não é tão trivial assim de fazer a atualização da parte específica, mas até vou ver se consigo fazer algum exemplo assim e lhe passar depois.

Eu também tenho vários projetos pessoais pequenos, que uso para atender as minhas necessidades, mas pretendo publicar um ou outro, às vezes pode ser útil e interessante para as outras pessoas.


Já havia percebido isso também e é um dos pontos que será resolvido para a próxima versão.

M

Baixei e utilizei seu programa e sem dúvidas é muito bom,

só achei uma coisa que poderia ser implementada que no meu ponto de vista seria muito útil:
A utilização da Tecla “Delete” para poder apagar os arquivos, sem ter que ir la no botão apagar,

assim poderia navegar na JTree com as setas e apagar os arquivos com o delete.

Mas fora isso sem comparação, Muito Bom, parabéns!

M

manolimars:
Baixei e utilizei seu programa e sem dúvidas é muito bom,

só achei uma coisa que poderia ser implementada que no meu ponto de vista seria muito útil:
A utilização da Tecla “Delete” para poder apagar os arquivos, sem ter que ir la no botão apagar,

assim poderia navegar na JTree com as setas e apagar os arquivos com o delete.

Mas fora isso sem comparação, Muito Bom, parabéns!


Obrigado pela sugestão! Está anotada. Na próxima versão isso será incluso.

I

Parabéns!
Esta na minha lista de programas pra melhorar o desempenho do PC

Mas tenho algumas sugestões
esta tudo ótimo mas acho que o terminal não poderia aparecer e tentar melhorar o tempo sei que é difícil mas sei la de repente dando uma olhada no seu algorítimo de de melhorar um pouco e no Vasculhando diretórios… acho que teria que mostrar mais detalhes pois da uma agonia ver aquela tela sempre igual por um bom tempo

Mas parabéns mesmo pelo projeto e quando um amigo reclamar que tem muitos arquivos duplicados indicarei esse!

M

Cara, o programa passa um tempão procurando um arquivo numa pasta pequena e não acha, e pra que serve esse excluir???
Se eu fosse como muitos colegas meus, eu nem ia mais querer saber de seu programa e nunca mais ia usa-lo. Mas ainda bem que não sou eles :lol: :slight_smile:
Também não consegui achar o código-fonte.
Da umas melhoradas ai. :wink:
Tchau!
Se cuida

E

Cara to testando aqui!
Eu to iniciando no Java agora e to achando o seu software sensacional!!

Criado 27 de fevereiro de 2010
Ultima resposta 21 de set. de 2012
Respostas 49
Participantes 18