<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.uugrn.org/index.php?action=history&amp;feed=atom&amp;title=Doubletten_finden</id>
	<title>Doubletten finden - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.uugrn.org/index.php?action=history&amp;feed=atom&amp;title=Doubletten_finden"/>
	<link rel="alternate" type="text/html" href="https://wiki.uugrn.org/index.php?title=Doubletten_finden&amp;action=history"/>
	<updated>2026-06-17T13:04:07Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in UUGRN</subtitle>
	<generator>MediaWiki 1.42.5</generator>
	<entry>
		<id>https://wiki.uugrn.org/index.php?title=Doubletten_finden&amp;diff=5436&amp;oldid=prev</id>
		<title>Rabe: Struktur, Formatierung</title>
		<link rel="alternate" type="text/html" href="https://wiki.uugrn.org/index.php?title=Doubletten_finden&amp;diff=5436&amp;oldid=prev"/>
		<updated>2007-07-15T13:19:04Z</updated>

		<summary type="html">&lt;p&gt;Struktur, Formatierung&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 15. Juli 2007, 13:19 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l59&quot;&gt;Zeile 59:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 59:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;aus {{man|freebsd|1|grep}}:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;aus {{man|freebsd|1|grep}}:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/del&gt;-F, --fixed-strings&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;-F, --fixed-strings&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;              &lt;/del&gt;Interpret  PATTERN as a list of fixed strings, separated by &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;new-&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;   &lt;/ins&gt;Interpret  PATTERN as a list of fixed strings, separated by &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;newlines&lt;/ins&gt;, any of which is to be matched.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;              lines&lt;/del&gt;, any of which is to be matched.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;-f FILE, --file=FILE&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/del&gt;-f FILE, --file=FILE&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;   &lt;/ins&gt;Obtain  patterns  from  FILE, one per line.  The empty file &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;contains &lt;/ins&gt;zero patterns, and therefore matches nothing.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;              &lt;/del&gt;Obtain  patterns  from  FILE, one per line.  The empty file &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;con-&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;              tains &lt;/del&gt;zero patterns, and therefore matches nothing.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Performance ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Performance ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l80&quot;&gt;Zeile 80:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 78:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  e3f7bb147a9810a8f1730c79ea776bb1|/pfad/zur/Musik/unsortiert/Interpret_1%20-%20Titel_1.mp3&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  e3f7bb147a9810a8f1730c79ea776bb1|/pfad/zur/Musik/unsortiert/Interpret_1%20-%20Titel_1.mp3&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==&lt;/del&gt;== Weitere Schritte &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==&lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Weitere Schritte ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Anhand dieser Ausgabe kann man relativ schnell entscheiden, welche Dateien gelöscht werden können.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Anhand dieser Ausgabe kann man relativ schnell entscheiden, welche Dateien gelöscht werden können.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Falls es nur um Platzersparnis geht, die Dateien aber an beiden Orten verbleiben sollen, können ersatzweise auch [[Hardlink]]s oder [[Symlink]]s erzeugt werden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Falls es nur um Platzersparnis geht, die Dateien aber an beiden Orten verbleiben sollen, können ersatzweise auch [[Hardlink]]s oder [[Symlink]]s erzeugt werden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rabe</name></author>
	</entry>
	<entry>
		<id>https://wiki.uugrn.org/index.php?title=Doubletten_finden&amp;diff=5435&amp;oldid=prev</id>
		<title>Rabe: Ein Anfang. Problem, Ansatz, Umsetzung, Weitere Schritte.</title>
		<link rel="alternate" type="text/html" href="https://wiki.uugrn.org/index.php?title=Doubletten_finden&amp;diff=5435&amp;oldid=prev"/>
		<updated>2007-07-15T13:14:34Z</updated>

		<summary type="html">&lt;p&gt;Ein Anfang. Problem, Ansatz, Umsetzung, Weitere Schritte.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ver größere Archive von z.B. Multimedia-Daten wie etwa Musik oder Fotos hat, kommt früher oder später an den Punkt, Doubletten finden zu müssen, die sich im Laufe der Zeit entwickelt haben. Gemeint sind hier Bit-identische Dateiinhalte unter verschiedenen Namen und/oder in verschiedenen Verzeichnissen.&lt;br /&gt;
&lt;br /&gt;
== Ansatz ==&lt;br /&gt;
Das Tool [[md5]] bzw unter Linux [[md5sum]] kann aus einer Liste von angegebenen Dateien eine Ausgabeliste erzeugen, wo jede Datei mit ihrer md5-Summe dargestellt wird.&lt;br /&gt;
&lt;br /&gt;
; Ausgabebeispiel von md5 -r:&lt;br /&gt;
 e3f7bb147a9810a8f1730c79ea776bb1 ./Musik/Interpret 1/Album 1/Interpret 1 - Titel 1.mp3&lt;br /&gt;
 a283f7ee42d067645bff9b090ad2db05 ./Musik/Interpret 1/Album 1/Interpret 1 - Titel 2.mp3&lt;br /&gt;
 e7cbc5c42bf1d6c0d0411a14d749acd7 ./Musik/Interpret 2/Album 1/Interpret 2 - Titel 1.mp3&lt;br /&gt;
 c03d58aa8f3679c52d8a7a6e9202156c ./Musik/Interpret 2/Album 1/Interpret 2 - Titel 2.mp3&lt;br /&gt;
&lt;br /&gt;
Irgendwo auf der Platte liegen vielleicht noch Kopien herum, die schon sortiert wurden, aber von der (unsortierten) Quelle nicht entfernt wurden, z.B.&lt;br /&gt;
&lt;br /&gt;
 e3f7bb147a9810a8f1730c79ea776bb1 ./Musik/unsortiert/Interpret_1%20-%20Titel_1.mp3&lt;br /&gt;
 c03d58aa8f3679c52d8a7a6e9202156c ./Musik/unsortiert/titel%202.mp3&lt;br /&gt;
&lt;br /&gt;
Auf den ersten Blick könnte man aufgrund von Erfahrung und schnellem Erkennen von typischen Mustern erkennen, dass die erste und letzte Datei aus der Gesamtliste nochmal als Doublette in /unsortiert/ liegt, auch ohne die md5-Summen zu kennen. Das menschliche Gehirn ist aber nicht in der Lage, diese Erkennung auf einer sehr großen Liste von Dateien systematisch durchzuführen. Dazu sind Rechner besser geeignet. Allerdings ist es sehr schwer einen Algorithmus zu definieren, der anhand der Dateinamen eine solche Suche durchführt, denn dazu müsste man diesem Algorithmus menschliche (Un)Intelligenz zufügen. Computer mögen Zahlen und daher wird nicht anhand der Dateinamen verglichen, sondern anhand der Inhalte.&lt;br /&gt;
&lt;br /&gt;
;Nachteil:&lt;br /&gt;
Der große Nachteil dieser Methode ist: man findet nur echte Kopien. Hat man beispielsweise einen Titel mit verschiedenen Bitraten vorliegen oder wurden in manchen Dateien irgendwelche Metainformationen verändert, so liegt keine bitidentische Kopie mehr vor und der Rechner kann es nicht erkennen.&lt;br /&gt;
&lt;br /&gt;
;Exkurs:&lt;br /&gt;
Um dieses Problem systematisch zu lösen, müsste sich der Computer die Musik &amp;quot;anhören&amp;quot; und analysieren, wie deckungsgleich bestimmte Aufnahmen sind um dann mit einer Wahrscheinlichkeit angeben zu können, wie &amp;quot;identisch&amp;quot; die Aufnahmen sind. In der Realität würde man eine ganze Reihe von Parametern (Abspieldauer, Dynamik, Takt, Klangfarben und Frequenzspektren (Instrumente), ... ), definieren, die einzeln analysiert werden und die man dann zahlenmäßig auf Ähnlichkeit prüft. Mustererkennung.  Dies ist nicht Gegenstand dieses Artikels.&lt;br /&gt;
&lt;br /&gt;
Analog dazu versucht man beispielsweise durch automatische Auswertung von Einzelbildern aus Videokameras einzelne Personen aus Menschenmengen zu identifizieren, etwa bekannte Hooligans im Fußballstadion oder Leute mit einem &amp;quot;Terroristen-Gesicht&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Werkzeug benutzen ==&lt;br /&gt;
=== Liste erstellen ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;md5 -r&amp;#039;&amp;#039;&amp;#039; unter BSD ({{FIXME|Parameter für md5sum  unter Linux}}) erzeugen die benötigte Liste, mit &amp;#039;&amp;#039;&amp;#039;find&amp;#039;&amp;#039;&amp;#039; listet man alle zu durchsuchenden Dateien.&lt;br /&gt;
&lt;br /&gt;
 $ find /pfad/zur/Musik/ -name &amp;quot;*.mp3&amp;quot; -exec md5 -r {} \+ | sed -e &amp;#039;s, ,|,&amp;#039; &amp;gt; md5_alle.out&lt;br /&gt;
&lt;br /&gt;
ergibt die Datei &amp;#039;&amp;#039;md5_alle.out&amp;#039;&amp;#039;, die etwa so aussieht:&lt;br /&gt;
 e3f7bb147a9810a8f1730c79ea776bb1|/pfad/zur/Musik/unsortiert/Interpret_1%20-%20Titel_1.mp3&lt;br /&gt;
 c03d58aa8f3679c52d8a7a6e9202156c|/pfad/zur/Musik/unsortiert/titel%202.mp3&lt;br /&gt;
 e3f7bb147a9810a8f1730c79ea776bb1|/pfad/zur/Musik/Interpret 1/Album 1/Interpret 1 - Titel 1.mp3&lt;br /&gt;
 a283f7ee42d067645bff9b090ad2db05|/pfad/zur/Musik/Interpret 1/Album 1/Interpret 1 - Titel 2.mp3&lt;br /&gt;
 e7cbc5c42bf1d6c0d0411a14d749acd7|/pfad/zur/Musik/Interpret 2/Album 1/Interpret 2 - Titel 1.mp3&lt;br /&gt;
 c03d58aa8f3679c52d8a7a6e9202156c|/pfad/zur/Musik/Interpret 2/Album 1/Interpret 2 - Titel 2.mp3&lt;br /&gt;
&lt;br /&gt;
=== Doubletten filtern ===&lt;br /&gt;
Das Gespann &amp;#039;&amp;#039;&amp;#039;sort|uniq -d&amp;#039;&amp;#039;&amp;#039; liefert eine einfache Liste aller doppelt vorkommenden Zeilen(!) aus dem Eingabestrom. &lt;br /&gt;
Da wir uns aber nur für die doppelt vorkommenden md5-Summen interessieren, die jeweils am Zeilenanfang stehen, &lt;br /&gt;
schneiden wir die gesamte Pfad/Dateiangabe (hinter |) ab, das macht &amp;#039;&amp;#039;&amp;#039;cut&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
 $ &amp;lt; md5_alle.out cut -f 1 -d &amp;quot;|&amp;quot; | sort | uniq -d &amp;gt; md5_dbl.out&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;#039;&amp;#039;md5_dbl.out&amp;#039;&amp;#039; ergibt folgenden Inhalt:&lt;br /&gt;
 e3f7bb147a9810a8f1730c79ea776bb1&lt;br /&gt;
 c03d58aa8f3679c52d8a7a6e9202156c&lt;br /&gt;
&lt;br /&gt;
Wie wir aus diesen Zahlen jetzt wieder die Pfade/Dateinamen erhalten und zwar alle Doubletten, zeigen wir Euch nach der nächsten Maus.&lt;br /&gt;
&lt;br /&gt;
=== Doubletten auflisten ===&lt;br /&gt;
Aus der Liste &amp;#039;&amp;#039;md5_alle.out&amp;#039;&amp;#039;, die ganz am Anfang generiert wurde und der Liste mit allen doppelt vorkommenden md5-Summen erzeugen wir eine menschenlesbare Liste mit allen Doppelt vorkommenden Dateinamen. Dabei hilft uns &amp;#039;&amp;#039;&amp;#039;grep&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 $ grep -F -f md5_dbl.out md5_alle.out | sort &amp;gt; md5_dbl_files.out&lt;br /&gt;
&lt;br /&gt;
aus {{man|freebsd|1|grep}}:&lt;br /&gt;
&lt;br /&gt;
       -F, --fixed-strings&lt;br /&gt;
              Interpret  PATTERN as a list of fixed strings, separated by new-&lt;br /&gt;
              lines, any of which is to be matched.&lt;br /&gt;
&lt;br /&gt;
       -f FILE, --file=FILE&lt;br /&gt;
              Obtain  patterns  from  FILE, one per line.  The empty file con-&lt;br /&gt;
              tains zero patterns, and therefore matches nothing.&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Mit -F geht es einfach nur sehr viel schneller, da die Suchstrings, die mittels -f zeilenweise eingelesen werden, nicht als [[Regular Expression]] interpretiert werden. Die Suche nach &amp;quot;fixed strings&amp;quot; ist deutlich schneller.&lt;br /&gt;
&lt;br /&gt;
Angenommen man hat ein sehr umfangreiches Foto-Archiv mit z.B. 10.000 Bilddateien und findet 1.000 Doubletten, dann müssen hier 10.000.000 Vergleiche durchgeführt werden und da macht sich die Verwendung von -F deutlich bemerkbar.&lt;br /&gt;
&lt;br /&gt;
==== Ausgabe ====&lt;br /&gt;
Obige Befehlsliste ergibt für unser kleines Beispiel folgenden Output:&lt;br /&gt;
&lt;br /&gt;
 c03d58aa8f3679c52d8a7a6e9202156c|/pfad/zur/Musik/Interpret 2/Album 1/Interpret 2 - Titel 2.mp3&lt;br /&gt;
 c03d58aa8f3679c52d8a7a6e9202156c|/pfad/zur/Musik/unsortiert/titel%202.mp3&lt;br /&gt;
 e3f7bb147a9810a8f1730c79ea776bb1|/pfad/zur/Musik/Interpret 1/Album 1/Interpret 1 - Titel 1.mp3&lt;br /&gt;
 e3f7bb147a9810a8f1730c79ea776bb1|/pfad/zur/Musik/unsortiert/Interpret_1%20-%20Titel_1.mp3&lt;br /&gt;
&lt;br /&gt;
==== Weitere Schritte ====&lt;br /&gt;
Anhand dieser Ausgabe kann man relativ schnell entscheiden, welche Dateien gelöscht werden können.&lt;br /&gt;
Falls es nur um Platzersparnis geht, die Dateien aber an beiden Orten verbleiben sollen, können ersatzweise auch [[Hardlink]]s oder [[Symlink]]s erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Anwendungsbeispiel]]&lt;/div&gt;</summary>
		<author><name>Rabe</name></author>
	</entry>
</feed>