Ich habe viele Bilder in ein Verzeichnis heruntergeladen.
Der Downloader hat bereits vorhandene Dateien umbenannt.
Ich habe auch einige der Dateien manuell umbenannt.
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
Wie entferne ich doppelte? Das Ergebnis sollte sein:
a.jpg
b.jpg
c.jpg
world.jpg
Hinweis: Der Name spielt keine Rolle. Ich möchte nur Uniq-Dateien.
echo cksm
nach der Zeile, die mit beginnt , eine hinzufügen,read
wenn Sie den Hash jeder Datei sehen möchten.**
die Option die Liste so anordnet, dass die beiden Ordner verschachtelt sind und nicht der gesamte Ordner 1 und der gesamte Ordner 2. Das Skript belässt immer das erste "Original". es trifft, während es die Liste durchläuft. Sie könnenecho $file
vor derread
Zeile sehen, ob dies zutrifft.fdupes ist das Werkzeug Ihrer Wahl. So finden Sie alle doppelten Dateien (nach Inhalt, nicht nach Name) im aktuellen Verzeichnis:
So bestätigen Sie das Löschen duplizierter Dateien manuell:
So löschen Sie automatisch alle Kopien außer der ersten von jeder duplizierten Datei ( seien Sie gewarnt, diese Warnung löscht tatsächlich Dateien, wie angefordert ):
Ich würde empfehlen, die Dateien vor dem Löschen manuell zu überprüfen:
quelle
-d '\n'
fdupes -rdN .
Dabei ist -r rekursiv, -d ist delete und -N ist keine EingabeaufforderungSie können FSLint ausprobieren . Es hat sowohl Befehlszeile als auch GUI-Schnittstelle .
quelle
Da ich ein bisschen faul bin, habe ich nicht lange gebraucht, um eine online zu finden .
Sie müssen zunächst eine CRC-Prüfsumme für jede Datei erstellen, da Sie natürlich nur exakte Duplikate entfernen möchten.
Durchlaufen Sie dann diese Dateiliste und lesen Sie die Prüfsumme sowie den Dateinamen ein. Wenn zwei Prüfsummen identisch sind, wird die Datei entfernt. Dies funktioniert, da die Sortierung numerisch ist und nur nach den Prüfsummen sortiert wird, die doppelte Dateien gruppieren.
Dies funktioniert natürlich nicht rekursiv.
quelle
Wie teste ich Dateien mit einzigartigem Inhalt?
Wie können wir eine Liste der Dateien im Verzeichnis bekommen?
Wir können 2 beliebige Dateien aus dieser Liste abrufen und prüfen, ob ihre Namen unterschiedlich sind und der Inhalt identisch ist.
Zum Beispiel haben wir ein Verzeichnis:
Es gibt also nur 3 eindeutige Dateien.
Lass uns das Skript ausführen:
Und wir bekommen nur 3 Dateien hinterlassen.
quelle
Ich habe dieses winzige Skript geschrieben, um doppelte Dateien zu löschen
https://gist.github.com/crodas/d16a16c2474602ad725b
Grundsätzlich wird eine temporäre Datei (
/tmp/list.txt
) verwendet, um eine Karte der Dateien und ihrer Hashes zu erstellen. Später benutze ich diese Dateien und die Magie von Unix-Pipes, um den Rest zu erledigen.Das Skript löscht nichts, druckt jedoch die Befehle zum Löschen von Dateien.
mfilter.sh ./dir | bash
Ich hoffe es hilft
quelle
Präzisere Version zum Entfernen doppelter Dateien (nur eine Zeile)
find_same_size.sh
quelle
Ich habe einen einfacheren Weg gefunden, um die gleiche Aufgabe auszuführen
quelle
Die meisten und möglicherweise alle verbleibenden Antworten sind schrecklich ineffizient, wenn die Prüfsumme jeder einzelnen Datei im zu verarbeitenden Verzeichnis berechnet wird.
Ein potenziell um Größenordnungen schnellerer Ansatz besteht darin, zunächst die Größe jeder Datei zu ermitteln, die fast unmittelbar (
ls
oderstat
) vorliegt, und dann die Prüfsummen nur für Dateien mit einer nicht eindeutigen Größe zu berechnen und zu vergleichen.quelle
Dies ist nicht das, was Sie fragen, aber ich denke, jemand könnte es nützlich finden, wenn die Prüfsummen nicht gleich sind, aber der Name ähnlich ist (mit Suffix in Klammern). Dieses Skript entfernt die Dateien mit dem Suffix ("Ziffer")
quelle
Ich habe ein kleines Programm gefunden, das diese Art von Aufgaben wirklich vereinfacht: fdupes .
quelle