Localizar arquivos duplicados por conteúdo

1. Localizar arquivos duplicados por conteúdo

Esdras Almir M. Silva
Esdrasas

(usa Kurumin)

Enviado em 20/11/2008 - 14:54h

Estou com uma missão "Herculana" durante a cópia de um HD de 180Gb para outro de 500Gb, houve um desligamento da máquina. Ao religar observei que em diversos diretórios apenas os diretórios haviam sidos copiados, faltando os arquivos. Como eu só percebi isso depois de um tempo. Parei tudo e fiz uma restauração de tudo que havia sido apagado nos 2 Hds. A restauração não é 100%, fiquei com diversos arquivos com nomes esquisitos.
Preciso desenvolver, achar, fazer um script, que faça a comparação dos arquivos existentes e ache os duplicados pelo conteudo, pois pelo nome não dá. Alguém já passou por isso e tenha alguma sugestão?

Grato.


  


2. Re: Localizar arquivos duplicados por conteúdo

nelio
neliobjr

(usa Red Hat)

Enviado em 20/11/2008 - 18:27h

Situaçãozinha complicada hein.

Espero que alguem te arrume uma solução melhor, mas a que eu vejo no momento é fazer uma comparação, arquivo por arquivo, e os que forem iguais vc jogar para um determinado lugar,

para isso imagino que assim, ajude,

lista todos os arquivos e com o comando diff (diff arquivo1 arquivo2 >/dev/null) quando os arquivos forem identicos te retornara 0 senão 1.

A partir dai da para pensar em algo...



3. Re: Localizar arquivos duplicados por conteúdo

Vítor De Araújo
ux386

(usa Debian)

Enviado em 21/11/2008 - 21:16h

Por acaso eu tenho um script que faz isso... Ele tira o md5sum de todos os arquivos, ordena a lista, 'diffa' os arquivos com o mesmo md5 (só pra ter certeza) e, se forem iguais, apaga o último (ou mostra o que ele apagaria, caso a opção '-n' seja usada). Como ele compara arquivo por arquivo, ele pode ser *MUITO* lento, mas ele faz o serviço.

Com o '-n' ele imprime uma lista na forma:
rm -v "arquivo-tal" #same as arquivo-tal
Assim você pode redirecionar a saída para um arquivo, escolher o que você quer realmente apagar, e rodar o arquivo (bash arquivo).

Para todos os fins, este código está em domínio público. ;-)
(E fica bem melhor com tabulação...)

#!/bin/bash
# cnr - Compare and Remove.
# 2008/08/02.

IFS=''

[[ $# -eq 0 ]] && {
echo "Usage: ${0##*/} [-n] dir..."
echo " -n: No action - just shows what would be done."
exit 1
}

while [[ $# -gt 0 ]]; do
case "$1" in
-n) noact=1 ;;
--) break ;;
-*) echo "Unknown option \"$1\"."; exit 1 ;;
*) break ;;
esac
shift
done

if (($noact)); then
# del original new (removes $2).
del() { printf 'rm -v %q #same as %q\n' "$2" "$1"; }
else
del() { rm -v "$2"; }
fi

find "[email protected]" -type f -print0 | xargs -0 md5sum | LC_ALL=C sort | while read line; do
md5="${line%% *}"
file="${line#* }"
[[ $md5 = $lastmd5 ]] && cmp "$file" "$lastfile" && del "$lastfile" "$file"
lastmd5="$md5"
lastfile="$file"
done



4. Re: Localizar arquivos duplicados por conteúdo

Esdras Almir M. Silva
Esdrasas

(usa Kurumin)

Enviado em 22/11/2008 - 23:11h

Grato pelas sugestões ( Neliobjr e ux386 ), eu estava sem ideia do que fazer. Estarei pondo mãos a obra e depois coloco o resultado aqui.

Para otimizar, se houver uma maneira de identificar o tipo de arquivo, se ele é texto, planilha, audio, etc... o script ficará mais objetivo.
Estou pesquisando o uso do "file" para ajudar nesta identificação.

Valeu vcs me deram uma direção para pesquisar.


5. Re: Localizar arquivos duplicados por conteúdo

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/09/2010 - 01:25h

Pra mim ajudou bastante


6. Re: Localizar arquivos duplicados por conteúdo

Rodrigo Carvalho
rdgacarvalho

(usa Red Hat)

Enviado em 11/01/2012 - 17:44h

Caro Esdrasas,

Existe uma maneira muita mais facil de localizar estes arquivos utilizando o fdupes.

O fdupes checa byte-a-byte a diferença entre arqvuios em um mesmo diretorio, basta você estar no diretório onde estão localizados os arquivos e executar o comando abaixo:

root # fdupes .

Ele retornará para você em blocos todos os arquivos duplicados, se você precisar excluir os arquivos duplicados mantendo apenas um basta executar o comando passando o parâmetro -f como abaixo:

root # fdupes -f .

Abraços.


7. Re: Localizar arquivos duplicados por conteúdo

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 11/01/2012 - 18:19h

Belo script @ux386, porque não publica este script aqui no VOL?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts