Cerca duplicati di file in OSX per hash


14

Sto cercando un modo per cercare un determinato file in OSX (Maverick ma più in generale OSX). In particolare vorrei fare quanto segue:
dato un File_001 vorrei cercare se nel filesystem esiste una copia di questo file.
Non solo con lo stesso nome, vorrei che il metodo di confronto fosse un algoritmo di hashing come MD5, SHA ecc.

La maggior parte del "cercatore di file duplicati" ho provato a cercare tutti i duplicati in un disco / sistema. Sarei invece interessato a inviare un file e cercare i suoi duplicati.

Qualcuno sa se esiste un programma del genere? Forse qualche oscura funzione di Spotlight?


1
Diffidare di un hash che determina se un determinato file è una copia. Questo approccio potrebbe non riuscire con i file .emlx (formato di file di Apple Mail), ad esempio. Come aiuto a Spotlight, OSX aggiunge metadati ai file di posta. La stessa e-mail in due percorsi diversi può avere metadati diversi anche se l'ID messaggio è lo stesso. Hash diverso per due file contenenti esattamente la stessa email non elaborata.
John D.

Risposte:


17

Potresti anche usare fdupes. Non ha un'opzione per cercare duplicati di un file specifico, ma puoi semplicemente grep l'output per il nome file:

fdupes -r1 .|grep filename

-rricorre in directory e -1stampa ogni gruppo di file duplicati su una sola riga.

Altri esempi utili:

fdupes -r . trova tutti i file duplicati nella directory corrente;

fdupes -r . -dN elimina tutto tranne il primo duplicato da ciascun gruppo di duplicati;

fdupes -r dir1 dir2|grep dir1/|xargs rmrimuove i duplicati in dir1.

È possibile installare fdupescon brew install fdupes.


È possibile avere un elenco di file che NON sono duplicati nella directory corrente?
gagarine,

7

Puoi facilmente crearlo tu stesso con alcuni comandi della shell:

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

    costruirà un elenco di hash md5 su tutti i tuoi file.

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

    cercherà l'hash md5 di FILE-TO-SEARCH

L'esecuzione del primo comando (specialmente se lo esegui su tutto il disco) richiederà comunque molto tempo.


Se vuoi solo cercare un file, puoi anche usare

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

Il primo passaggio dovrebbe essere una ricerca per operazione di dimensioni esatte.
user188421

@biziclop Se vuoi solo cercare un file, sì. Se vuoi cercarne diversi, è più veloce creare l'indice una volta e poi cercare attraverso il file indice in seguito.
Nohillside

1
È vero, ho notato questa frase nella domanda: "Sarei invece interessato a inviare un file e cercare i suoi duplicati".
user188421

fdupes dovrebbe essere più veloce prima fa il confronto delle date, poi l'hash parziale, quindi l'hash completo.
gagarine,

1

Questo dovrebbe funzionare se si sostituisce la dimensione e l'hash per FILE_001 nel comando.

198452 byte è la dimensione del file che ho usato e il file hash md5 è 3915dc84b4f464d0d550113287c8273b

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

L'output sarà un elenco di file con nomi di percorso relativi alla directory inviata al comando find.

Questo approccio ha il vantaggio che avrà solo file hash che corrispondono alla dimensione del tuo originale e produrrà solo nomi di file che corrispondono all'hash.


0

Se non vuoi fare confusione con gli script, puoi avvicinarti al comportamento che desideri con Araxis Trova file duplicati $ 10 nel Mac App Store . C'è anche una demo di 7 giorni sul loro sito web. Trova file duplicati cerca i duplicati calcolando l'hash per ciascun file.

È possibile approssimare il comportamento desiderato per impostare una cartella con il singolo file di cui si è preoccupati, quindi aggiungere le cartelle in cui si desidera effettuare la ricerca. Ciò riporterà anche altri duplicati, se presenti, nei percorsi di ricerca.

Questa app ha molte funzioni di ordinamento che rendono i risultati molto facili da capire.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.