Identificar arquivos iguais (Resolvido)

Iniciado por jopeu, 02 de Maio de 2018, 06:51

tópico anterior - próximo tópico

jopeu

Ola amigos, uso kubuntu 18.04
Estou fazendo uma revisão e vejo que tenho muitos arquivos de backup que parecem ser os mesmos

Vcs conhecem algum programa para identificar quais arquivos são iguais?

Agradeço enormemente a dica

Obrigado

zekkerj

Havia uma ferramenta específica pra isso cujo nome me escapa agora... mas dá pra identificar sem gastar muito tempo, por script.

Eu imagino vc pegando os primeiros 1024 bytes do arquivo e tirando um checksum MD5. Sendo arquivos binários, a chance de que haja diferença no conteúdo se não houver nesses primeiros 1024 bytes é mínima; mas se ficar dúvida, vc pode testaram trecho maior pra confirmar.

Sugestão pra começar a trabalhar...


#!/bin/bash

DIR=/home/backup
OUT=/tmp/iguais.lst

for file in $DIR/*
do
  sum=`head --bytes 1024 $file | md5sum`
  echo "$sum $file" >> $OUT
done
sort -n $OUT

Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

jopeu

Obrigado zekkerj

Me sugeriram um programa pela linha de comando o fdupes. E passei uma hora fazendo um tutorial dele.

Posto aqui porque pode ser de muita utilidade para todos.

TUTOR:

Como remover arquivos duplicados no Linux com fdupes


Uma tarefa muito comum que precisamos realizar de tempos em tempos é a de procurar e eliminar arquivos duplicados em um sistema. Esse é um procedimento que permite liberar espaço precioso em disco, cuja falta pode significar problemas sérios se não for levado em conta.

Porém, essa limpeza, se realizada manualmente, pode ser extremamente tediosa e levar muito tempo, sendo recomendado usar ferramentas específicas para esse fim. Neste tutorial vamos mostrar como utilizar uma ferramenta para eliminação de arquivos duplicados no Linux, usando como exemplo o Debian GNU/Linux; a ferramenta também pode ser executada em outras distribuições, como as das famílias Fedora e Red Hat, por exemplo.

A ferramenta que utilizaremos se chama fdupes, escrita em linguagem C e distribuída sob a licença MIT.

Como instalar o fdupes: Em sistemas baseados em Debian podemos instalar a ferramenta usando o bom e velho apt:

$ sudo apt-get install fdupes

Sintaxe do comando:

fdupes [opções] diretório01 diretório02 ...

Opções principais

-r --recurse
    Modo recursivo: procura arquivos duplicados no diretório e em seus subdiretórios
-s --symlinks
    Seguir links simbólicos
-H --hardlinks
    No geral, quando dois ou mais arquivos apontam para a mesma área do disco, eles são tratados como não-duplicados. Com essa opção, esse comportamento é alterado.
-n --noempty
    Não leva em consideração arquivos de tamanho 0.
-A --nohidden
    Não considera arquivos ocultos na varredura
-q --quiet
    Ocultar o indicador de progresso da tarefa
-f --omitfirst
    Omitir o primeiro arquivo em cada conjunto de arquivos duplicados encontrados
-S --size
    Mostrar o tamanho dos arquivos duplicados
-d --delete
    Pergunta ao usuário quais arquivos deseja preservar, e exclui os demais
-N --noprompt junto com --delete
    Preserva o primeiro arquivo em cada conjunto de duplicados e exclui o restante sem perguntar
-v --version
    Mostra a versão do fdupes instalada.

Exemplos de uso do fdupes

1 - Para encontrar arquivos duplicados com o fdupes, basta executá-lo, sem parâmetros, indicando o caminho do diretório que se deseja analisar:

$ fdupes /caminho/diretório

Será exibida uma lista contendo os nomes dos arquivos duplicados encontrados no diretório passado como argumento. Para que também sejam analisados os subdiretórios, utilize a opção -r (modo recursivo).

2 - Também é possível especificar mais de um diretório distinto para que seja feita a varredura por arquivos duplicados, de uma só vez, separando os caminhos dos diretórios por espaços:

$ fdupes /home/fabio  /home/ana

3 - Com a opção -S é possível verificar os tamanhos dos arquivos duplicados encontrados, como segue:

$ fdupes -S /home/fabio

4 - Do ponto de vista da segurança, você pode imprimir a saída de 'fdupes' no arquivo e, em seguida, verificar o arquivo de texto para decidir qual arquivo será excluído. Esta diminuição das chances de obter seu arquivo excluído acidentalmente. Você pode fazer:

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

5 - Para excluir todos os arquivos duplicados em um diretório, podemos utilizar a opção -d:

$ fdupes -d /home/fabio/Documentos

Excluindo arquivos duplicados no Linux com fdupes

Essa opção exclui todas os arquivos duplicados, porém preservando uma cópia de cada. O programa pergunta qual das cópias você deseja manter, ou se deseja manter todas (all). No exemplo, eu decidi manter a cópia de número 2 (o arquivo exemplo4). Basta entrar com o número da cópia e pressionar enter - as demais instâncias do arquivo serão eliminadas automaticamente.

É isso aí! Você pode testar as demais opções mostradas acima para aprender mais sobre o utilitário, e, como sempre, pode ler as páginas de manual para obter a ajuda completa do utilitário, que possui diversas outras opções disponíveis.


5 - Não existe uma opção que seria movida para o lixo em vez de excluir os arquivos?

1 – A opção é esta:

$ for f in $(fdupes -f .); do gvfs-trash $f; done for f in $(fdupes -f .); do gvfs-trash $f; done for f in $(fdupes -f .); do gvfs-trash $f; done

2 - Se você tiver nomes de arquivos com espaços e caracteres especiais ou muitos arquivos. Melhor ainda seria

$ fdupes -f . | xargs -rd '\n' -- gvfs-trash fdupes -f . | xargs -rd '\n' -- gvfs-trash fdupes -f . | xargs -rd '\n' -- gvfs-trash

Obrigado zekkerj

zekkerj

Falei que tinha ferramenta específica.

Observa se ela compara o arquivo inteiro, ou se tem como limitar a comparação a um certo tamanho, isso pode acelerar bastante o processo com arquivos grandes.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Xin

Um aplicativo com interface gráfica, que sempre uso para função é o dupeGuru. Me atende perfeitamente!

Ele pode ser baixado neste link: https://www.hardcoded.net/dupeguru/.

Usei ele a última vez no Ubuntu 16.04, não sei se é compatível com o K/Ubuntu 18.04.
"Teoria é quando tudo se sabe e nada funciona. Prática é quando tudo funciona e ninguém sabe por quê. Neste local conjugam-se teoria e prática: nada funciona e ninguém sabe porque."

jopeu

Parece zekkerj que compara parte do arquivo, por isso tem que se ver o tutorial e não deletar direto

Xin legal mas o 18.04 ainda está sem funcionar, inclusive ao parecer eram i386 que no 18.04 foi banido.

Obrigado a todos

bonilhasilvio

@jopeu,  seu tutorial está muito bom.
Segundo meus testes o  dupeGuru até a versão  3.7.1, não estava compatível com o Ubuntu 18.04.  Ainda parece-me que há uma limitação para deleção de 10 arquivos por vez.
Segui o tutorial do @jopeu e fiquei super satisfeito. Resolveu meu problema.
Obrigado