Procurar duplicatas de arquivo no OSX por hash

14

Estou procurando uma maneira de procurar um arquivo determinado no OSX (Maverick, mas mais geralmente OSX). Em particular, gostaria de fazer o seguinte:
dado um File_001, gostaria de pesquisar se no sistema de arquivos existe uma cópia desse arquivo.
Não apenas com o mesmo nome, eu gostaria que o método de comparação fosse um algoritmo de hash como MD5, SHA etc.

A maioria dos "localizadores de arquivos duplicados" Tentei apenas procurar todas as duplicatas em uma unidade / sistema. Em vez disso, eu estaria interessado em enviar um arquivo e procurar suas duplicatas.

Alguém sabe se esse programa existe? Talvez alguma função obscura do Spotlight?

nick2k3
fonte
1
Desconfie de um hash para determinar se um determinado arquivo é uma cópia. Essa abordagem pode falhar com arquivos .emlx (formato de arquivo do Apple Mail), por exemplo. Como auxílio ao Spotlight, o OSX anexa metadados aos arquivos de correio. O mesmo email em dois caminhos diferentes pode ter metadados diferentes, mesmo que o ID da mensagem seja o mesmo. Hash diferente para dois arquivos que contêm exatamente o mesmo email bruto.
John D.

Respostas:

16

Você também pode usar fdupes. Ele não tem uma opção para procurar duplicatas de um arquivo específico, mas você pode apenas dar um grep na saída do nome do arquivo:

fdupes -r1 .|grep filename

-rrecursiva em diretórios e -1imprime cada grupo de arquivos duplicados em uma única linha.

Outros exemplos úteis:

fdupes -r . localiza todos os arquivos duplicados no diretório atual;

fdupes -r . -dN exclui tudo, exceto a primeira duplicata de cada grupo de duplicatas;

fdupes -r dir1 dir2|grep dir1/|xargs rmremove duplicatas em dir1.

Você pode instalar fdupescom brew install fdupes.

Lri
fonte
É possível ter uma lista de arquivos que NÃO são duplicados no diretório atual?
gagarine 01/02
7

Você pode criar isso facilmente com alguns comandos do shell:

  • find ~ -type f -exec md5 -r '{}' \; > /tmp/md5.list

    criará uma lista de hashes MD5 sobre todos os seus arquivos.

  • grep $(md5 -q FILE-TO-SEARCH) /tmp/md5.list

    procurará o hash md5 do FILE-TO-PESQUISA

A execução do primeiro comando (especialmente se você executá-lo em todo o disco), ainda leva muito tempo.


Se você deseja procurar apenas um arquivo, também pode usar

SIZE=$(stat -f '%z' FILE-TO-SEARCH)
MD5=$(md5 -q FILE-TO-SEARCH)
find ~ -type f -size ${SIZE}c | while read f; do
    [[ $MD5 = $(md5 -q "$f") ]] && echo $f
done
nohillside
fonte
A primeira passagem deve ser encontrada pela operação de tamanho exato.
precisa saber é o seguinte
@biziclop Se você deseja pesquisar apenas um arquivo, sim. Se você deseja pesquisar vários, é mais rápido criar o índice uma vez e apenas pesquisar no arquivo de índice posteriormente.
nohillside
1
É verdade, é claro, acabei de notar esta frase na pergunta: "Em vez disso, eu estaria interessado em enviar um arquivo e procurar suas duplicatas".
precisa saber é o seguinte
O fdupes deve ser mais rápido, primeiro faz a comparação de datas, depois o hash parcial e o hash completo.
gagarine 01/02
1

Isso deve funcionar se você substituir o tamanho e o hash por FILE_001 no comando.

198452 bytes é o tamanho do arquivo que eu usei e o hash do arquivo md5 é 3915dc84b4f464d0d550113287c8273b

find . -type f -size 198452c -exec md5 -r {} \; |
    grep -o "3915dc84b4f464d0d550113287c8273b\ \(.*\)" | awk '{print $2}'

A saída será uma lista de arquivos com nomes de caminho relativos ao diretório enviado ao comando find.

Essa abordagem tem a vantagem de apenas arquivos de hash que correspondem ao tamanho do original e gerar apenas nomes de arquivos que correspondam ao hash.

John D.
fonte
0

Se você não quiser mexer com scripts, pode se aproximar do comportamento desejado com o Araxis Find Duplicate Files $ 10 na Mac App Store . Há também uma demonstração de 7 dias em seu site. O Find Find Duplicate Files procura duplicações calculando o hash de cada arquivo.

Você pode aproximar o comportamento que deseja, configurando uma pasta com o único arquivo com o qual está preocupado e adicionar as pastas nas quais deseja pesquisar. Isso também relatará outros truques, se houver algum, nos caminhos de pesquisa.

Este aplicativo tem muitos recursos de classificação agradáveis, tornando os resultados muito fáceis de entender.

Ɱark Ƭ
fonte