Wyszukaj duplikaty plików w OSX według skrótów


14

Szukam sposobu wyszukiwania określonego pliku w OSX (Maverick, ale bardziej ogólnie OSX). W szczególności chciałbym wykonać następujące czynności:
biorąc pod uwagę plik_001 Chciałbym sprawdzić, czy w systemie plików istnieje kopia tego pliku.
Nie tylko o tej samej nazwie, chciałbym, aby metoda porównania była algorytmem mieszającym, takim jak MD5, SHA itp.

Większość „wyszukiwarki duplikatów plików” próbowałem po prostu wyszukać wszystkie duplikaty w napędzie / systemie. Zamiast tego chciałbym przesłać jeden plik i wyszukać jego duplikaty.

Czy ktoś wie, czy taki program istnieje? Może jakaś niejasna funkcja Spotlight?


1
Uważaj na skrót określający, czy dany plik jest kopią. To podejście może się nie powieść na przykład w przypadku plików .emlx (format pliku Apple Mail). Jako pomoc Spotlight OSX dołącza metadane do plików poczty. Ten sam e-mail w dwóch różnych ścieżkach może mieć różne metadane, nawet jeśli Identyfikator wiadomości jest taki sam. Inny skrót dla dwóch plików zawierających dokładnie ten sam nieprzetworzony e-mail.
John D.

Odpowiedzi:


17

Możesz także użyć fdupes. Nie ma opcji wyszukiwania duplikatów określonego pliku, ale możesz po prostu grepować dane wyjściowe dla nazwy pliku:

fdupes -r1 .|grep filename

-rpowraca do katalogów i -1drukuje każdą grupę duplikatów plików w jednym wierszu.

Inne przydatne przykłady:

fdupes -r . znajdzie wszystkie zduplikowane pliki w bieżącym katalogu;

fdupes -r . -dN usuwa wszystkie oprócz pierwszego duplikatu z każdej grupy duplikatów;

fdupes -r dir1 dir2|grep dir1/|xargs rmusuwa duplikaty w dir1.

Możesz zainstalować za fdupespomocą brew install fdupes.


1
Czy w bieżącym katalogu można mieć listę plików, które NIE są duplikatami?
gagarine

7

Możesz to łatwo zbudować samodzielnie za pomocą niektórych poleceń powłoki:

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

    zbuduje listę skrótów md5 na wszystkich twoich plikach.

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

    wyszuka hash md5 FILE-TO-SEARCH

Uruchomienie pierwszego polecenia (zwłaszcza jeśli uruchomisz je na całej płycie) zajmie jednak dużo czasu.


Jeśli chcesz wyszukać tylko jeden plik, możesz także użyć

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

Pierwsze przejście powinno być znalezione przez operację dokładnego rozmiaru.
biziclop

@biziclop Jeśli chcesz wyszukać tylko jeden plik, tak. Jeśli chcesz wyszukać kilka, szybciej zbuduj indeks raz, a następnie po prostu przeszukaj plik indeksu.
nohillside

1
To prawda, właśnie zauważyłem to zdanie w pytaniu: „Zamiast tego chciałbym przesłać jeden plik i wyszukać jego duplikaty”.
biziclop

fdupes powinien być szybszy, jeśli najpierw porówna datę, następnie częściowy skrót, a następnie pełny skrót.
gagarine

1

Powinno to zadziałać, jeśli zastąpisz rozmiar i skrót hasłem FILE_001 w poleceniu.

198452 bajtów to rozmiar pliku, którego użyłem, a skrót pliku md5 to 3915dc84b4f464d0d550113287c8273b

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

Wynikiem będzie lista plików o nazwach ścieżek względem katalogu wysłanego do komendy find.

Zaletą tego podejścia jest to, że będzie haszować tylko pliki pasujące do rozmiaru oryginału i będzie wyświetlać tylko nazwy plików pasujące do haszowania.


0

Jeśli nie chcesz zadzierać ze skryptami, możesz zbliżyć się do pożądanego zachowania dzięki Araxis Find Duplicate Files 10 USD w Mac App Store . Na ich stronie internetowej znajduje się także 7-dniowa wersja demonstracyjna. Znajdź zduplikowane pliki wyszukuje duplikaty, obliczając skrót dla każdego pliku.

Możesz określić zachowanie, które chcesz skonfigurować za pomocą pojedynczego pliku, o który się martwisz, a następnie dodać foldery, które chcesz przeszukać. Spowoduje to również zgłoszenie innych duplikatów, jeśli takie istnieją, na ścieżkach wyszukiwania.

Ta aplikacja ma wiele fajnych funkcji sortowania, dzięki czemu wyniki są bardzo łatwe do zrozumienia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.