você está aqui: Home  → Arquivo de Mensagens

Remoção de arquivos duplicados em sistemas GNU/Linux

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 19 de agosto de 2010

Em tempos de Internet, Youtube, cameras digitais, etc. o seu computador logo se enche de fotos, vídeos, músicas, apresentações, e um monte de outras coisas. Com cameras digitais então a situação é bem pior. Será que você já baixou as fotos de sua camera? Na dúvida, baixamos de novo. E o lixo vai aumentando, pois ninguém quer perder nada.

Em sistemas GNU/Linux, você pode usar o programa fdupes, que é um programa invocado a partir da linha de comando para localizar arquivos duplicados dentro de uma estrutura de diretórios. O programa funciona através do cálculo da assinatura md5 dos arquivos. Este algoritmo é utilizado para verificar a integridade de arquivos. É comum em servidores FTP publicar os arquivos juntamente com sua assinatura MD5. Ao baixar o arquivo, basta verificar o MD5 e verificar se bate com a assinatura MD5 publicada pelo distribuidor do arquivo. Se estiverem iguais, significa que o arquivo não foi corrompido durante a transferência.

Desta forma, se a assinatura MD5 de dois arquivos for igual, significa também que os arquivos são iguais. Vejamos como o programa funciona. Da forma mais simples, basta invocar o programa e especificar o diretório a ser analisado:

$ fdupes tmp
 
tmp/filme0.wmv
tmp/copiafilme0.wmv

tmp/filme3.wmv
tmp/copiafilme3.wmv
...

O arquivo copiafilme0.wmv é uma cópia do arquivo filme0.wmv.

O comando agrupa sempre os arquivos semelhantes. No exemplo acima, cada arquivo possuía uma cópia. Note que existe uma linha em branco entre cada listagem.

O fdupe pode fazer mais, como por exemplo, uma busca recursiva:

$  $ fdupes -r tmp  > duplicatas.txt

É recomendável salvar a saída em um arquivo (duplicatas.txt) para que depois se possa resolver o que fazer com as cópias.

Uma outra alternativa, a ser usada com muito cuidado, é apagar, junto com a execução do programa, os arquivos duplicados:

$ fdupes -d tmp
[1] tmp/filme0.wmv                      
[2] tmp/copiafilme0.wmv
[3] tmp/copia2filme0.wmv

Set 1 of 10, preserve files [1 - 3, all]: 1

   [+] tmp/filme0.wmv
   [-] tmp/copiafilme0.wmv
   [-] tmp/copia2filme0.wmv

[1] tmp/filme3.wmv
[2] tmp/copiafilme3.wmv

Set 2 of 10, preserve files [1 - 2, all]:

O programa me pergunta qual arquivo eu devo preservar. Na primeira instância, eu optei por preservar o arquivo 1, tmp/filme0.wmv. Os demais foram apagados. Isto pode ser visto na saída que o comando exibiu após eu ter digitado o número 1. Os arquivos apagados foram precedidos dos caracteres [-]. Outra observação, a frase Set 1 of 10 indica que foram encontrados dez conjuntos de arquivos duplicados.

No exemplo anterior, eu tenho que especificar o arquivo que desejo preservar. Para situações em que temos centenas de arquivos, isto pode ser bastante demorado. Para apagar os arquivos sem exigir confirmação, utilize a seguinte sintaxe (mas tome muito cuidado!):

$ fdupes -d -N tmp

É claro que se você tiver centenas de arquivos duplicados, este processo pode ser bastante entediante e propenso a erros. Para poucos diretórios a opção de deleção é válida. Para um número maior de arquivos, talvez seja melhor montar um script ou algo do tipo.

Como sempre, antes de realizar qualquer tarefa que pode envolver perda de dados, leia o manual com atenção e execute o comando com muito cuidado.



Veja a relação completa dos artigos de Rubens Queiroz de Almeida