Pesquisa de site

fdupes – Uma ferramenta de linha de comando para localizar e excluir arquivos duplicados no Linux


É um requisito comum localizar e substituir arquivos duplicados para a maioria dos usuários de computador. Encontrar e remover arquivos duplicados é um trabalho cansativo que exige tempo e paciência. Encontrar arquivos duplicados pode ser muito fácil se sua máquina for GNU/Linux, graças ao utilitário ‘fdupes’.

O que é fdupes?

Fdupes é um utilitário Linux escrito por Adrian Lopez em linguagem de programação C lançado sob licença MIT. O aplicativo é capaz de encontrar arquivos duplicados em um determinado conjunto de diretórios e subdiretórios. Os Fdupes reconhecem duplicatas comparando a assinatura MD5 dos arquivos seguida por uma comparação byte a byte. Muitas opções podem ser passadas com Fdupes para listar, excluir e substituir os arquivos por hardlinks para duplicatas.

A comparação começa na ordem:

Comparação de tamanho > Comparação parcial de assinatura MD5 > Comparação completa de assinatura MD5 > Comparação byte a byte.

Instale fdupes em um Linux

A instalação da versão mais recente do fdupes (fdupes versão 1.51) é tão fácil quanto executar o seguinte comando em sistemas baseados em Debian, como Ubuntu e Linux Mint.

sudo apt-get install fdupes

Em sistemas baseados em CentOS/RHEL e Fedora, você precisa ativar o repositório epel para instalar o pacote fdupes.

yum install fdupes
dnf install fdupes    [On Fedora 22 onwards]

Nota: O gerenciador de pacotes padrão yum foi substituído pelo dnf do Fedora 22 em diante…

Como usar o comando fdupes?

1. Para fins de demonstração, vamos criar alguns arquivos duplicados em um diretório (digamos tecmint) simplesmente como:

mkdir /home/"$USER"/Desktop/tecmint && cd /home/"$USER"/Desktop/tecmint && for i in {1..15}; do echo "I Love Tecmint. Tecmint is a very nice community of Linux Users." > tecmint${i}.txt ; done

Após executar o comando acima, vamos verificar se os arquivos duplicados foram criados ou não usando o comando ls.

$ ls -l

total 60
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint10.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint11.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint12.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint13.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint14.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint15.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint1.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint2.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint3.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint4.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint5.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint6.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint7.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint8.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

O script acima cria 15 arquivos, nomeadamente tecmint1.txt, tecmint2.txt…tecmint15.txt e cada arquivo contém os mesmos dados, ou seja,

"I Love Tecmint. Tecmint is a very nice community of Linux Users."

2. Agora procure por arquivos duplicados dentro da pasta tecmint.

$ fdupes /home/$USER/Desktop/tecmint 

/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

3. Pesquise duplicatas recursivamente em cada diretório, incluindo seus subdiretórios, usando a opção -r.

Ele pesquisa todos os arquivos e pastas recursivamente, dependendo do número de arquivos e pastas, levará algum tempo para verificar as duplicatas. Nesse meio tempo, será apresentado a você o progresso total no terminal, algo assim.

$ fdupes -r /home

Progress [37780/54747] 69%

4. Veja o tamanho das duplicatas encontradas em uma pasta usando a opção -S.

$ fdupes -S /home/$USER/Desktop/tecmint

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

5. Você pode ver o tamanho dos arquivos duplicados para cada diretório e subdiretório encontrado usando as opções -S e -r ao mesmo tempo. , como:

$ fdupes -Sr /home/avi/Desktop/

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

107 bytes each:
/home/tecmint/Desktop/resume_files/r-csc.html
/home/tecmint/Desktop/resume_files/fc.html

6. Além de pesquisar em uma pasta ou em todas as pastas recursivamente, você pode escolher entre duas ou três pastas, conforme necessário. Sem mencionar que você pode usar a opção -S e/ou -r se necessário.

fdupes /home/avi/Desktop/ /home/avi/Templates/

7. Para excluir os arquivos duplicados preservando uma cópia, você pode usar a opção '-d'. Cuidado extra deve ser tomado ao usar esta opção, caso contrário você pode acabar perdendo os arquivos/dados necessários e lembre-se de que o processo é irrecuperável.

$ fdupes -d /home/$USER/Desktop/tecmint

[1] /home/tecmint/Desktop/tecmint/tecmint13.txt
[2] /home/tecmint/Desktop/tecmint/tecmint8.txt
[3] /home/tecmint/Desktop/tecmint/tecmint11.txt
[4] /home/tecmint/Desktop/tecmint/tecmint3.txt
[5] /home/tecmint/Desktop/tecmint/tecmint4.txt
[6] /home/tecmint/Desktop/tecmint/tecmint6.txt
[7] /home/tecmint/Desktop/tecmint/tecmint7.txt
[8] /home/tecmint/Desktop/tecmint/tecmint9.txt
[9] /home/tecmint/Desktop/tecmint/tecmint10.txt
[10] /home/tecmint/Desktop/tecmint/tecmint2.txt
[11] /home/tecmint/Desktop/tecmint/tecmint5.txt
[12] /home/tecmint/Desktop/tecmint/tecmint14.txt
[13] /home/tecmint/Desktop/tecmint/tecmint1.txt
[14] /home/tecmint/Desktop/tecmint/tecmint15.txt
[15] /home/tecmint/Desktop/tecmint/tecmint12.txt

Set 1 of 1, preserve files [1 - 15, all]: 

Você pode notar que todas as duplicatas estão listadas e você será solicitado a excluí-las, uma por uma ou em determinado intervalo, ou todas de uma vez. Você pode selecionar um intervalo semelhante ao abaixo para excluir arquivos de um intervalo específico.

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

   [-] /home/tecmint/Desktop/tecmint/tecmint13.txt
   [+] /home/tecmint/Desktop/tecmint/tecmint8.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint11.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint3.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint4.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint6.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint7.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint9.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint10.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint2.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint5.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint14.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint1.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint15.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint12.txt

8. Do ponto de vista da segurança, você pode querer imprimir a saída de ‘fdupes’ no arquivo e então verificar o arquivo de texto para decidir qual arquivo excluir. Isso diminui as chances de seu arquivo ser excluído acidentalmente. Você pode fazer:

fdupes -Sr /home > /home/fdupes.txt

Nota: Você pode substituir '/home' pela pasta desejada. Use também a opção ‘-r’ e ‘-S’ se quiser pesquisar recursivamente e Tamanho da Impressão, respectivamente.

9. Você pode omitir o primeiro arquivo de cada conjunto de correspondências usando a opção ‘-f’.

Primeiro Liste os arquivos do diretório.

$ ls -l /home/$USER/Desktop/tecmint

total 20
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (3rd copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (4th copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (another copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

e omita o primeiro arquivo de cada conjunto de correspondências.

$ fdupes -f /home/$USER/Desktop/tecmint

/home/tecmint/Desktop/tecmint9 (copy).txt
/home/tecmint/Desktop/tecmint9 (3rd copy).txt
/home/tecmint/Desktop/tecmint9 (another copy).txt
/home/tecmint/Desktop/tecmint9 (4th copy).txt

10. Verifique a versão instalada do fdupes.

$ fdupes --version

fdupes 1.51

11. Se precisar de ajuda sobre fdupes, você pode usar a opção ‘-h’.

$ fdupes -h

Usage: fdupes [options] DIRECTORY...

 -r --recurse     	for every directory given follow subdirectories
                  	encountered within
 -R --recurse:    	for each directory given after this option follow
                  	subdirectories encountered within (note the ':' at
                  	the end of the option, manpage for more details)
 -s --symlinks    	follow symlinks
 -H --hardlinks   	normally, when two or more files point to the same
                  	disk area they are treated as non-duplicates; this
                  	option will change this behavior
 -n --noempty     	exclude zero-length files from consideration
 -A --nohidden    	exclude hidden files from consideration
 -f --omitfirst   	omit the first file in each set of matches
 -1 --sameline    	list each set of matches on a single line
 -S --size        	show size of duplicate files
 -m --summarize   	summarize dupe information
 -q --quiet       	hide progress indicator
 -d --delete      	prompt user for files to preserve and delete all
                  	others; important: under particular circumstances,
                  	data may be lost when using this option together
                  	with -s or --symlinks, or when specifying a
                  	particular directory more than once; refer to the
                  	fdupes documentation for additional information
 -N --noprompt    	together with --delete, preserve the first file in
                  	each set of duplicates and delete the rest without
                  	prompting the user
 -v --version     	display fdupes version
 -h --help        	display this help message

Isso é para tudo agora. Deixe-me saber como você estava encontrando e excluindo arquivos duplicados até agora no Linux? e também me diga sua opinião sobre este utilitário. Coloque seus valiosos comentários na seção de comentários abaixo e não se esqueça de curtir/compartilhar e nos ajudar a espalhar.

Estou trabalhando em outro utilitário chamado fslint para remover arquivos duplicados, postarei em breve e vocês vão adorar ler.