Narzędzia Linux do znajdowania duplikatów plików?

13

Mam duży i stale rosnący zestaw plików tekstowych, które są dość małe (mniej niż 100 bajtów). Chcę różnicować każdą możliwą parę plików i notować, które są duplikatami. Mógłbym napisać skrypt Pythona, aby to zrobić, ale zastanawiam się, czy istnieje narzędzie wiersza polecenia systemu Linux (a może prosta kombinacja narzędzi), które by to zrobiło?

Aktualizacja (w odpowiedzi na komentarz mfinni ): Pliki znajdują się w jednym katalogu, więc wszystkie mają różne nazwy plików. (Ale wszystkie mają wspólne rozszerzenie nazwy pliku, co ułatwia wybranie ich wszystkich za pomocą symboli wieloznacznych).

Daryl Spitzer
źródło
Zakładam, że nazwy plików nie są duplikatami, a jedynie zawartością?
mfinni
pixelbeat.org/fslint, jeśli szukasz treści powyżej linku, może ci to pomóc. :)
Rajat

Odpowiedzi:

22

fdupes . Ale zwykle używam kombinacjifind . -type f -exec md5sum '{}' \; | sort | uniq -d -w 36

Hubert Kario
źródło
1
Ta odmiana zadziałała dla mnie: find . -name "*.csv" | xargs md5sum | sort | uniq -D -w 34 (Użyłem uniq -D i wolę xargs, aby znaleźć -exec.)
Daryl Spitzer
+1 Nie byłem świadomy fdupes, to narzędzie wygląda bardzo przydatne.
Zoredache,
3
@Daryl: Używanie w xargsten sposób nie działa w przypadku nazw plików z odstępami, używanie -execjednak działa. Użycie -type fjako dodatkowego argumentu find(może być używane razem z -name) ogranicza wyszukiwanie do plików.
fuenfundachtzig
+1 dla fdupes, ponieważ jest szybki również dla dużych plików binarnych.
Bengt,
W niektórych rzadkich przypadkach xargs nie działał (zawieszał się po pewnej ilości przetworzonych plików), ale nie znajdowałem -exec, który cały czas pracował. @fuenfundachtzig, można użyć xargs -0 --delimiter = "\ n" do obsługi tego rodzaju plików.
ychaouche
6

Cóż, jest FSlint - którego nie użyłem w tym szczególnym przypadku, ale powinienem być w stanie sobie z tym poradzić: http://en.flossmanuals.net/FSlint/Introduction

oszust
źródło
+1 dla FSlint. Bardzo intuicyjny interfejs i zaawansowane opcje dostosowywania.
Glutanimate,
3

Prawie na pewno nie chcesz różnicować każdej pary plików. Prawdopodobnie będziesz chciał użyć czegoś takiego jak md5sums, aby uzyskać wszystkie sumy kontrolne wszystkich plików i potokować to do innego narzędzia, które będzie raportować tylko duplikaty sum kontrolnych.

Zoredache
źródło
2
Można zmniejszyć liczbę sum md5 obliczoną przez obliczenie tylko sum md5 dla plików o rozmiarze, dla których istnieje więcej niż jeden plik o tym rozmiarze. Tak więc dla wszystkich plików, które mają unikalny rozmiar w bajtach, nie potrzebujesz sumy md5, ponieważ nie mogą być duplikatami niczego.
tomsv