Encontrar um arquivo por hash

2

Eu tenho um arquivo x1 em um diretório (d1) e não tenho certeza se o mesmo arquivo já foi copiado (x2) em outro diretório (d2) (mas automaticamente renomeado por aplicativo).

Posso verificar se o hash do arquivo x1 do diretório d1 é igual ao hash de algum arquivo x2 existente no diretório d2?

    
por xralf 23.01.2017 / 11:24

2 respostas

2

Essa é uma boa abordagem, mas a pesquisa será muito mais rápida se você calcular apenas os hashes de arquivos com o tamanho correto. Usando os utilitários GNU / BusyBox:

wanted_size=$(stat -c %s d1/x1)
wanted_hash=$(sha256sum <d1/x1)
find d2 -type f -size "${wanted_size}c" -execdir sh -c 'test "$(sha256sum <"$0")" = "$1"' {} "$wanted_hash" \; -print
    
por 25.01.2017 / 03:06
1

Para localizar um arquivo com um resumo MD5 conhecido em um diretório (usando bash ou ksh93 ):

x1digest="$( md5sum d1/x1 | cut -d ' ' -f 1 )"

for x2 in d2/*; do
    if [[ ! -f "$fpath" ]]; then
      continue
    fi

    x2digest="$( md5sum "$fpath" | cut -d ' ' -f 1 )"

    if [[ "$x2digest" == "$x1digest" ]]; then
      printf '"%s" has the same hash as d1/x1\n' "$fpath"
    fi
done

Em sistemas BSD, md5sum filename | cut -d ' ' -f 1 pode ser substituído por md5 -q filename .

    
por 23.01.2017 / 11:28