Programm des Tages: rdfind

Heute will(*) ich mal ein Kommandozeilen-Programm vorstellen: rdfind – ein Programm, das doppelt vorhandene Dateien aufspürt und auch automatisch löschen kann.

(*) Wer glaubt, dass hier „möchte“ zu stehen hat, sollte sich fragen, ob er zu seiner Hochzeit „Ja, ich möchte!“ sagen würde oder ob der Mensch mit einem freien Mögen geboren sein könnte …

Die Kommandozeile erinnert manchen an die schlechte alte DOS-Zeit und erscheint vielen als veraltet. Außerdem bediene ich hier natürlich ein Cliché, nachdem Linux-Anhänger alles per Kom­­man­­doz­­eile machen wollten und eigentlich auch machen müßten, weil ihnen ja nichts Besseres zur Verfügung stünde. Aber manche Sachen gehen per Kommandozeile einfach besser. Und manchmal hat sich einfach niemand die Mühe gemacht, eine grafische Benut­­zer­­ober­­fläche zu entwickeln. Auch unter Windows verwende ich beruflich regelmäßig das Äquivalent, die „Eingabeaufforderung“.

Ich vermute, das Problem ist verbreitet: Man legt mal eine lokale Sicherheitskopie an, sucht ein paar Bilder zum Ausdrucken für Oma raus, macht mal eben eine Kopie auf dem Desktop … und vergisst dann, die Dateien  anschließend wieder zu löschen. Und schon hat man Daten doppelt. Und keinen Durchblick mehr, welche. Rdfind findet die Dubletten und kann sie nach Wunsch auch löschen. Die zu löschenden Versionen werden dabei nach einem nach­­voll­­zieh­­baren Regelwerk bestimmt, so dass man die Kontrolle darüber hat.

rdfind Originale KrautUndRüben

Dieser Befehl durchsucht die beiden angegebenen Ordner nach Doubletten. Wenn eine Datei irgendwo unter Originale gefunden wird und eine Kopie davon unter KrautUndRüben, würde (wenn man zusätzlich die Option „-deleteduplicates true“ angibt) letztere ge­­löscht, weil das entsprechende Verzeichnis in der Kommandozeile später angegeben wurde. Würden beide Dateien unterhalb des­­sel­­ben angegebenen Verzeichnisses gefunden, also zum Beispiel beide unter KrautUndRüben, gilt die, die tiefer in der Verzeichnis­­struktur „ver­­graben“ ist, als die Kopie. Bei gleicher Verschach­­telungs­­tiefe wird die Dateireihenfolge verwendet, wie sie auch bei der Ausgabe der Dateien gezeigt wird.

Zahlreiche Dateien auf Gleichheit zu untersuchen ist eine auf­­wän­­di­­ge Aufgabe. Aber die Vorgehensweise von rdfind ist intelligent. Als erstes wird die exakte Dateilänge herangezogen. Danach werden die ersten und die letzten paar Bytes der Dateien verglichen. (Die ersten könnten zum Beispiel bei JPEGs häufig übereinstimmen, da sie Verwaltungsinformationen enthalten; daher ist es klug, auch die letzten heranzuziehen.) Dateien, die sich dann immer noch nicht als unterschiedlich herausgestellt haben – und das dürften nicht mehr viele sein, die nicht wirklich identisch sind – werden mit einer schnell berechenbaren Hash-Funktion verglichen. Es wird also für jede Datei eine (sehr große) Zahl berechnet, deren Wert sich bei einer kleinen Änderung an der Datei stark ändert. Dateien, die den­­selben Hash haben, gelten als identisch.

Für die gefundenen Duplikate gibt es verschiedene Mög­­lich­­keiten: Wenn man nichts anderes angibt, wird eine Liste dieser Dateien erstellt. Man kann die Doubletten auch automatisch in symbolische oder „harte“ Links verwandeln lassen, so dass sie wei­­ter­­hin an beiden Orten vorhanden sind, aber nicht mehr doppelt Platz verbrauchen. Oder man kann sie löschen lassen – so dass unser Beispiel-Verzeichnis von Kraut und Rüben befreit ist und im Idealfall selbst gelöscht werden kann.

2 Gedanken zu „Programm des Tages: rdfind“

  1. (*) hm .. hier sollte eigentlich nicht nur wollen stehen..
    sie haben es ja getan.

    ich will Präsident werden.. ich will Prinzessin werden…
    (ob es dazu kommen wird.

    und ich mache es einfach…

    1. Hm.
      Verdammt.
      Sie haben Recht.
      Also, ich wollte natürlich auch, sonst hätt ich ja nicht, aber wenn ich nicht hätte, stünd das hier ja nicht hier.
      Eigentlich wollte ich – und habe ich! – hauptsächlich einen Kommentar zu „will“ und „möchte“ abgeben…

Schreibe einen Kommentar zu c-d Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert