Pobrałem wiele zdjęć z katalogu.
Downloader zmienił nazwy plików, które już istnieją.
Zmieniłem też nazwę niektórych plików ręcznie.
a.jpg
b.jpg
b(2).jpg
hello.jpg <-- manually renamed `b(3).jpg`
c.jpg
c(2).jpg
world.jpg <-- manually renamed `d.jpg`
d(2).jpg
d(3).jpg
Jak usunąć zduplikowane? Wynik powinien być:
a.jpg
b.jpg
c.jpg
world.jpg
Uwaga: nazwa nie ma znaczenia. Chcę tylko pliki uniq.
echo cksm
tuż po linii, zaczynając od,read
jeśli chcesz zobaczyć skrót każdego pliku.**
, porządkuje listę w taki sposób, że dwa foldery są przeplatane, a nie cały folder 1, a następnie cały folder 2. Skrypt zawsze pozostawi pierwszy „oryginalny” uderza podczas iteracji po liście. Możeszecho $file
przedread
wierszem sprawdzić, czy to prawda.fdupes to wybrane narzędzie. Aby znaleźć wszystkie zduplikowane pliki (według zawartości, a nie nazwy) w bieżącym katalogu:
Aby ręcznie potwierdzić usunięcie zduplikowanych plików:
Aby automatycznie usunąć wszystkie kopie oprócz pierwszego każdego zduplikowanego pliku ( uwaga, to ostrzeżenie, tak naprawdę usuwa pliki, zgodnie z żądaniem ):
Zalecam ręczne sprawdzenie plików przed usunięciem:
źródło
-d '\n'
fdupes -rdN .
gdzie -r jest rekurencyjne, -d jest usuwane, a -N nie jest wyświetlaneMożesz spróbować FSLint . Ma zarówno wiersz poleceń, jak i interfejs GUI .
źródło
Będąc trochę leniwym, nie zajęło mi długo znalezienie jednego online .
Najpierw musisz utworzyć sumę kontrolną CRC dla każdego pliku, ponieważ oczywiście chcesz jedynie usunąć dokładne duplikaty.
Następnie iteruj tę listę plików, wczytując sumę kontrolną, a także nazwę pliku. Jeśli dwie sumy kontrolne są takie same, plik zostanie usunięty. Działa to, ponieważ sortowanie jest numeryczne i sortuje tylko sumy kontrolne, które grupują duplikaty plików.
Oczywiście nie działa to rekurencyjnie.
źródło
Jak testować pliki o unikalnej zawartości?
Jak uzyskać listę plików w katalogu?
Możemy pobrać dowolne 2 pliki z tej listy i sprawdzić, czy ich nazwy są różne i czy treść jest taka sama.
Na przykład mamy trochę reż:
Są więc tylko 3 unikalne pliki.
Uruchommy ten skrypt:
I pozostały nam tylko 3 pliki.
źródło
Napisałem ten mały skrypt, aby usunąć zduplikowane pliki
https://gist.github.com/crodas/d16a16c2474602ad725b
Zasadniczo używa pliku tymczasowego (
/tmp/list.txt
) do utworzenia mapy plików i ich skrótów. Później używam tych plików i magii potoków uniksowych do reszty.Skrypt niczego nie usunie, ale wydrukuje polecenia usuwania plików.
mfilter.sh ./dir | bash
Mam nadzieję, że to pomoże
źródło
Bardziej zwięzła wersja usuwania zduplikowanych plików (tylko jedna linia)
find_same_size.sh
źródło
Znalazłem łatwiejszy sposób na wykonanie tego samego zadania
źródło
Większość i być może wszystkie pozostałe odpowiedzi są strasznie nieefektywne poprzez obliczenie sumy kontrolnej każdego pliku w katalogu do przetworzenia.
Potencjalnie szybszym podejściem o wielkości rzędu jest najpierw uzyskanie rozmiaru każdego pliku, co jest prawie natychmiastowe (
ls
lubstat
), a następnie obliczenie i porównanie sum kontrolnych tylko dla plików o nie unikalnym rozmiarze.źródło
Nie o to pytasz, ale myślę, że ktoś może się przydać, gdy sumy kontrolne nie są takie same, ale nazwa jest podobna (z przyrostkiem w nawiasach). Ten skrypt usuwa pliki z przyrostkami jako („cyfra”)
źródło
Znalazłem mały program, który naprawdę upraszcza tego rodzaju zadania: fdupes .
źródło