Hallo, kennt jemand von Euch eine einfache Möglichkeit doppelte Dateien auszulesen und zu löschen. Habe von einer Datensicherung meine Mails eingespielt und einige jetzt doppelt und dreifach vorhanden. Gruß L.K.
On Thu, Apr 03, 2003 at 10:48:29AM +0200, Lutz Kasper wrote:
kennt jemand von Euch eine einfache Möglichkeit doppelte Dateien auszulesen und zu löschen. Habe von einer Datensicherung meine Mails eingespielt und einige jetzt doppelt und dreifach vorhanden.
find . -type f -print0 | xargs -0 -i md5sum -b {} > /var/tmp/allsums cd /var/tmp sort -o allsums allsums awk 'old == $1 { printf "duplicate %s\n", $2 }; { old = $1; oldname = $2 }' allsums Die erste Version einer jeden Datei wird nicht gedruckt. Kristian
Am Donnerstag, 3. April 2003 12:45 schrieb Kristian Koehntopp:
On Thu, Apr 03, 2003 at 10:48:29AM +0200, Lutz Kasper wrote:
kennt jemand von Euch eine einfache Möglichkeit doppelte Dateien auszulesen und zu löschen. Habe von einer Datensicherung meine Mails eingespielt und einige jetzt doppelt und dreifach vorhanden.
find . -type f -print0 | xargs -0 -i md5sum -b {} > /var/tmp/allsums cd /var/tmp sort -o allsums allsums awk 'old == $1 { printf "duplicate %s\n", $2 }; { old = $1; oldname = $2 }' allsums
Muss ich mal ausprobieren. Klingt ganz gut, nur die Übersetzung der einzelnen Befehle muss ich mir aus dem Internet raussuchen. Alle sind mir noch nicht klar. Aber danke für die Mühe. Gruß L.K.
On Thu, Apr 03, 2003 at 03:07:24PM +0200, Lutz Kasper wrote:
find . -type f -print0 | xargs -0 -i md5sum -b {} > /var/tmp/allsums cd /var/tmp sort -o allsums allsums awk 'old == $1 { printf "duplicate %s\n", $2 }; { old = $1; oldname = $2 }' allsums
Muss ich mal ausprobieren. Klingt ganz gut, nur die Übersetzung der einzelnen Befehle muss ich mir aus dem Internet raussuchen. Alle sind mir noch nicht klar. Aber danke für die Mühe.
find . -type f -print0 | xargs -0 -i md5sum -b {} > /var/tmp/allsums find durchsucht das aktuelle Verzeichnis "." nach Dateien vom Typ f (regular files) und druckt die Namen dieser Dateien durch ein Nullbyte getrennt. Auf diese Weise spielen Leerzeichen in Dateinamen genau wie Returns und Quotezeichen einem keine üblen Streiche. xargs liest eine Reihe von durch Nullbytes (-0) getrennten Dateinamen auf stdin ein und führt das gegebene Kommando für jede Datei einzeln (-i) aus. Das Kommando lautet md5sum, und berechnet eine Prüfsumme für jeden Dateinamen ({} wird durch xargs entsprechend ersetzt). md5sum behandelt die Dateien als Binärdateien (-b). Das Resultat geht nach /var/tmp/allsums und sieht dann so aus: kris@valiant:~> head -10 /var/tmp/allsums 000f2db5a0795df72b7d3d34dc9f4d93 *./php4/ext/pdf/CREDITS 0011638e52cc7ef1089c95961bfbf191 *./pear/PHPUnit/CVS/Repository 00153ca2870e74f3b91d37f1e1133bb7 *./pear/XML_CSSML/docs/example.php 003058ee7385fe0ea312ca531398d4ca *./php4/win32/pwd.h 00360c62a05fdfff7088eeb424b61d27 *./pear/PHPDoc/renderer/html/CVS/Repository 004423db0f39104388e9c2eaf8135616 *./pear/HTML_TreeMenu/TreeMenu.js 00452b850b9139534e39c6b5348477c2 *./pear/HTML_Template_Flexy/Flexy/CVS/Entries 00542db62e9cdcf0c3406787d8f08e18 *./k3b-0.7.5/src/audio/.deps/k3baudiotrackdialog.Plo 0056321cc3f3c1964c03f3962da694ea *./php4/ext/mcrypt/CREDITS 0063d3306b15911132d6fa07ca982fee *./pear/HTML_OOH_Form/examples/xml/form_fulladress.php Wir wechseln nach /var/tmp/ (cd /var/tmp). Dort sortieren wie die Datei allsums in Place (-o Option verwendet). Die Datei ist jetzt so sortiert, daß Dateien mit gleicher Prüfsumme hintereinander in der Datei stehen. Wir durchsuchen jetzt die Datei allsums mit awk. Wir drucken Zeilen, bei denen aufeinanderfolgende Zeilen gleiche erste Worte (Prüfsummen) haben. Das awk-Programm: old == $1 { printf "duplicate %s\n", $2; } { old = $1; oldname = 2; } Man muss das Programm von unten nach oben lesen: Für jede Zeile merken wir uns das erste Wort der Zeile (die Checksum) in old und das zweite Wort der Zeile in oldname (den Dateinamen, vorausgesetzt, er enthält keine Leerzeichen oder Tabs oder Newlines). Wenn die aktuelle Prüfsumme $1 gleich der Prüfsumme der Vorzeile ist, wird der aktuelle Dateiname (vorausgesetzt er enthält ...) $2 gedruckt. Kristian
Am Donnerstag, 3. April 2003 16:02 schrieb Kristian Koehntopp:
find . -type f -print0 | xargs -0 -i md5sum -b {} > /var/tmp/allsums
find durchsucht das aktuelle Verzeichnis "." nach Dateien vom Typ f (regular files) und druckt die Namen dieser Dateien durch ein Nullbyte getrennt. Auf diese Weise spielen Leerzeichen in Dateinamen genau wie Returns und Quotezeichen einem keine üblen Streiche.
xargs liest eine Reihe von durch Nullbytes (-0) getrennten Dateinamen auf stdin ein und führt das gegebene Kommando für jede Datei einzeln (-i) aus.
Das Kommando lautet md5sum, und berechnet eine Prüfsumme für jeden Dateinamen ({} wird durch xargs entsprechend ersetzt). md5sum behandelt die Dateien als Binärdateien (-b).
Das Resultat geht nach /var/tmp/allsums und sieht dann so aus:
kris@valiant:~> head -10 /var/tmp/allsums 000f2db5a0795df72b7d3d34dc9f4d93 *./php4/ext/pdf/CREDITS 0011638e52cc7ef1089c95961bfbf191 *./pear/PHPUnit/CVS/Repository 00153ca2870e74f3b91d37f1e1133bb7 *./pear/XML_CSSML/docs/example.php
Wir wechseln nach /var/tmp/ (cd /var/tmp).
Dort sortieren wie die Datei allsums in Place (-o Option verwendet). Die Datei ist jetzt so sortiert, daß Dateien mit gleicher Prüfsumme hintereinander in der Datei stehen.
Wir durchsuchen jetzt die Datei allsums mit awk. Wir drucken Zeilen, bei denen aufeinanderfolgende Zeilen gleiche erste Worte (Prüfsummen) haben. Das awk-Programm:
old == $1 { printf "duplicate %s\n", $2; }
{ old = $1; oldname = 2; }
Man muss das Programm von unten nach oben lesen:
Für jede Zeile merken wir uns das erste Wort der Zeile (die Checksum) in old und das zweite Wort der Zeile in oldname (den Dateinamen, vorausgesetzt, er enthält keine Leerzeichen oder Tabs oder Newlines).
Wenn die aktuelle Prüfsumme $1 gleich der Prüfsumme der Vorzeile ist, wird der aktuelle Dateiname (vorausgesetzt er enthält ...) $2 gedruckt.
Danke für die ausführliche Beschreibung. Findet man in der Liste sehr selten. Ist aber für einen Anfänger genau das richtige. Ich hoffe anderen bringt es auch ewas. Gruß L.K.
On Friday 04 April 2003 15:27, Lutz Kasper wrote:
Danke für die ausführliche Beschreibung. Findet man in der Liste sehr selten. Ist aber für einen Anfänger genau das richtige.
Ich hoffe anderen bringt es auch ewas. Ja, da hast du recht. Die Lösung mit den Nullbyte:
find . -type f -print0 Ist genau das was ich schon lange suche.
Da lohnen sich 38000 ungelese eMails im SuSE Ordner schon mal. Ich hab die besten meiner Tricks aus der Liste hier. Grüße Martin PS: Sorry wegen PM, der alte Falsche-Reply-Taste Fehler.
On Don, 03 Apr 2003 at 15:07 (+0200), Lutz Kasper wrote:
Am Donnerstag, 3. April 2003 12:45 schrieb Kristian Koehntopp:
On Thu, Apr 03, 2003 at 10:48:29AM +0200, Lutz Kasper wrote:
kennt jemand von Euch eine einfache Möglichkeit doppelte Dateien auszulesen und zu löschen. Habe von einer Datensicherung meine Mails eingespielt und einige jetzt doppelt und dreifach vorhanden.
find . -type f -print0 | xargs -0 -i md5sum -b {} > /var/tmp/allsums cd /var/tmp sort -o allsums allsums awk 'old == $1 { printf "duplicate %s\n", $2 }; { old = $1; oldname = $2 }' allsums
Muss ich mal ausprobieren. Klingt ganz gut, nur die Übersetzung der einzelnen Befehle muss ich mir aus dem Internet raussuchen. Alle sind mir noch nicht klar. Aber danke für die Mühe.
Auch wenn Kristian sich die Mühe gemacht hat, Dir jeden Schritt zu erklären: Wieso musst Du im Internet suchen? man find man sort man awk Jan
* Lutz Kasper schrieb am 03.Apr.2003:
kennt jemand von Euch eine einfache Möglichkeit doppelte Dateien auszulesen und zu löschen. Habe von einer Datensicherung meine Mails eingespielt und einige jetzt doppelt und dreifach vorhanden.
Was verstehst Du unter doppelte Dateiein? Zwei Dateien im gleichen Verzeichnis müssen unterschiedliche Namen haben. Im mboxformat sind Mails keine eigene Dateien, sondern nur Bestandteile einer großen Datei. Bernd -- ROTFL = Rolling On The Floor, Laughing = Auf dem Boden wälzen, lachend. SCNR = Sorry, Could Not Resist = Sorry, Ich konte nicht widerstehen. AFAIK = As Far As I Know = So weit ich weis|BTW = By The Way = Nebenbei bemerkt IMHO = In My Humble Opinion = meiner bescheidenen Meinung nach |Zufallssig. 9
Am Donnerstag, 3. April 2003 12:53 schrieb Bernd Brodesser:
* Lutz Kasper schrieb am 03.Apr.2003:
kennt jemand von Euch eine einfache Möglichkeit doppelte Dateien auszulesen und zu löschen. Habe von einer Datensicherung meine Mails eingespielt und einige jetzt doppelt und dreifach vorhanden.
Was verstehst Du unter doppelte Dateiein? Zwei Dateien im gleichen Verzeichnis müssen unterschiedliche Namen haben.
Im mboxformat sind Mails keine eigene Dateien, sondern nur Bestandteile einer großen Datei.
OK Bernd, Du hast natürlich recht aber ich dafür die Lösung meines Problems. Trotzdem Dank für den Hinweis. Gruß L.K.
participants (5)
-
B.Brodesser@t-online.de
-
Jan.Trippler@t-online.de
-
Kristian Koehntopp
-
Lutz Kasper
-
Martin Scharrer