md5sum

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

md5sum

Beitrag von DEBIANUNDANDREAS » 17.09.2013 15:09:09

Hallo, mein herzallerliebstes Forum.
Ich möchte mir ein Script bauen, aber ich weiss nicht wie.
Ingredenzien: md5sum,grep,echo,sed und Terminal

Einleitung: Mein Script soll einen Ordner und die darin befindlichen Dateien checken. Die oben erwähnten Ingredenzien sollen hauptsächlich in Erscheinung treten, dadurch das die selbigen in einem Script über die Tastatur eingefügt werden. Das fertige Script soll einen x-beliebigen Dateinamen haben, und der endet mit .sh
Wenn ich mehrere Dateien in einem Ordner habe so komme ich damit nicht klar, denn ich weiss nicht wie man das macht. Eventuell mit sed?!
Und was auch noch wichtig die Ausgabe von md5sum soll in eine Textdatei gespeichert werden.
Wenn es möglich ist soll jede Datei eine md5sum haben, und der gesammte Ordner eine globale md5sum.
Sollte mir das helfen sollen die md5sum der einzelnen Dateien auszulesen sein aus der vorherigen Textdatei. Um den Datenabgleich erfoglreich zumachen.
Wer könnte mir hier, ein kleines Script, nicht mehr als 10 (zehn Zeilen Code posten)?


Bitte postet hier keine englishen Internetseiten

cronoik
Beiträge: 2049
Registriert: 18.03.2012 21:13:42
Lizenz eigener Beiträge: GNU Free Documentation License

Re: md5sum

Beitrag von cronoik » 17.09.2013 15:17:57

Hi,

es gibt bei den ubuntuusern bereits etwas fertiges [1] was du verwenden könntest. Das musst du dann einfach nur in ein Skript packen. Allerdings verwenden die nicht die von dir gewünschten tools.

[1] http://wiki.ubuntuusers.de/md5sum
Hilf mit unser Wiki zu verbessern!

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: md5sum

Beitrag von DEBIANUNDANDREAS » 17.09.2013 15:44:46

Ich habe die Seite von Ubuntuusers besucht, konnte aber meine Problemlösung nicht finden.

uname
Beiträge: 12403
Registriert: 03.06.2008 09:33:02

Re: md5sum

Beitrag von uname » 17.09.2013 15:47:52

Mal als sehr schlechte Idee:

md5.sh

Code: Alles auswählen

#!/bin/sh
find $1 -type f |xargs -i md5sum {} |awk '{print $2 ";" $1}'  > $2
(Syntax siehe unten, awk um die Ausgabe sinnvoll zu gestalten: erst Dateiname, dann Semikolon, dann Prüfsumme)

Und dann einfach:

Code: Alles auswählen

md5.sh /pfad/nach/irgendwo erstesicherung.txt
md5.sh /pfad/nach/irgendwo zweitesicherung.txt
Vergleich mit "vimdiff":

Code: Alles auswählen

vimdiff erstesicherung.txt zweitesicherung.txt
Leider kenne ich keine besseren textuellen Vergleichsprogramme außer eigene Scripte. "diff" funktioniert nicht wirklich schön. Kannst dir noch als Grafiktool Debianmeld anschauen.

Eigentlich gibt es aber fertige Programme. Für Debian-Pakete z.B. Debiandebsums.

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: md5sum

Beitrag von DEBIANUNDANDREAS » 17.09.2013 16:12:03

Leider funktioniert das Script nicht.

Code: Alles auswählen

andy@andy-desktop:~$ sudo '/home/andy/Arbeitsfläche/Text.sh' '/home/andy/Arbeitsfläche/Unbenannter Ordner' test.txt 
[sudo] password for andy: 
sudo: /home/andy/Arbeitsfläche/Text.sh: Befehl nicht gefunden
andy@andy-desktop:~$ sudo find $1 -type f |xargs -i md5sum {} |awk '{print $2 ";" $1}'  > $2 '/home/andy/Arbeitsfläche/Unbenannter Ordner' test.txt 
bash: $2: Mehrdeutige Umlenkung.
xargs: Prozess md5sum wurde durch das Signal 13 abgebrochen.
andy@andy-desktop:~

uname
Beiträge: 12403
Registriert: 03.06.2008 09:33:02

Re: md5sum

Beitrag von uname » 17.09.2013 16:17:20

Sieht ja grausam aus.Was willst du mit "sudo"? Was sollen die Hochkomma? Umlaute in Pfaden sind immer gefährlich. Ändere das. Speichere evtl. das Script außerhalb von "Arbeitsfläche".

Versuche es so erst mal ohne Script. Dann sind $1 und $2 außerhalb von awk zu ersetzen:

Code: Alles auswählen

find /pfad/nach/irgendwo -type f |xargs -i md5sum {} |awk '{print $2 ";" $1}'  > erstesicherung.txt
Ändere in "irgendwo" ein paar Dateien, um Unterschiede festzustellen:

Code: Alles auswählen

find /pfad/nach/irgendwo -type f |xargs -i md5sum {} |awk '{print $2 ";" $1}'  > zweitesicherung.txt

Alternative Kurzversion. Problem ist jedoch, dass erst die Prüfsummen kommen, welches evtl. den Vergleich erschwert, awk fehlt dann:

Code: Alles auswählen

find /pfad/nach/irgendwo -type f |xargs -i md5sum {}  > erstesicherung.txt

Code: Alles auswählen

find /pfad/nach/irgendwo -type f |xargs -i md5sum {}  > zweitesicherung.txt
Danach jeweils den "vimdiff", "diff" oder "meld".

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: md5sum

Beitrag von DEBIANUNDANDREAS » 17.09.2013 16:36:49

Jetzt brauche ich nur noch eine kleine Änderung.
In der Datei erstesicherung.txt

Code: Alles auswählen

/home/internet/Arbeitsfläche/Unbenannter;d41d8cd98f00b204e9800998ecf8427e
/home/internet/Arbeitsfläche/Unbenannter;d41d8cd98f00b204e9800998ecf8427e
/home/internet/Arbeitsfläche/Unbenannter;d41d8cd98f00b204e9800998ecf8427e
/home/internet/Arbeitsfläche/Unbenannter;d41d8cd98f00b204e9800998ecf8427e
/home/internet/Arbeitsfläche/Unbenannter;d41d8cd98f00b204e9800998ecf8427e
Jede reale Datei sollte mit ihrem Namen zu lesen sein

Code: Alles auswählen

/home/internet/Arbeitsfläche/Unbenannter Ordner/Unbenanntes Dokument;d41d8cd98f00b204e9800998ecf8427e

uname
Beiträge: 12403
Registriert: 03.06.2008 09:33:02

Re: md5sum

Beitrag von uname » 17.09.2013 16:42:06

Der Wert "d41d8cd98f00b204e9800998ecf8427e" steht für den leeren String. Leg doch mal ein paar echte Testdateien in einem Testordner an und poste deren Werte.

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: md5sum

Beitrag von DEBIANUNDANDREAS » 17.09.2013 17:58:39

Also .
Ich habe den Inhalt des Ordner 'Unbekannter Ordner' gelöscht dann habe ich drei Datei mit Inhalt im Ordner 'Unbekannter Ordner', aber 6* md5sum

Code: Alles auswählen

 find '/home/internet/Arbeitsfläche/Unbenannter Ordner'  -type f |xargs -i md5sum {} |awk '{print $2 ";" $1}'  > erstsicherung.txt

/home/internet/Arbeitsfläche/Unbenannter;d41d8cd98f00b204e9800998ecf8427e
/home/internet/Arbeitsfläche/Unbenannter;d41d8cd98f00b204e9800998ecf8427e
/home/internet/Arbeitsfläche/Unbenannter;891a433aed2ba4fc303a83b9d42c8935
/home/internet/Arbeitsfläche/Unbenannter;fe37a0b27732fc50c2b0b6972d19bbbe
/home/internet/Arbeitsfläche/Unbenannter;02feebca49271f25f0e5ff20ced48a8b
/home/internet/Arbeitsfläche/Unbenannter;d41d8cd98f00b204e9800998ecf8427e

uname
Beiträge: 12403
Registriert: 03.06.2008 09:33:02

Re: md5sum

Beitrag von uname » 17.09.2013 19:02:23

Der Fehler liegt in den Leerzeichen. Mit "awk" werden die Parameter umgedreht, leider auch mit Leerzeichen als Trennzeichen.

Versuche es so:

Code: Alles auswählen

find /pfad/nach/irgendwo  -type f |xargs -i md5sum {} |awk '{print substr($0,35,length-34)  ";" $1}' > erstsicherung.txt

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: md5sum

Beitrag von Phineas » 17.09.2013 21:37:25

Was soll die Umdreherei bringen ausser Ärger? Die Prüfsumme hat keine Leerzeichen und ist damit ein sicher zu filterndes erstes Wort, der Rest der Zeile ist Dateiname (falls die Dateinamen nicht auch noch Newlines enthalten - dann helfen eh nur noch Nullbytes).

Code: Alles auswählen

find /pfad/  -type f -exec md5sum {} \; > erstsicherung.txt

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: md5sum

Beitrag von r900 » 17.09.2013 22:43:33

uname hat geschrieben:

Code: Alles auswählen

find $1 -type f |xargs -i md5sum {} |awk '{print $2 ";" $1}'  > $2
(Syntax siehe unten, awk um die Ausgabe sinnvoll zu gestalten: erst Dateiname, dann Semikolon, dann Prüfsumme)
Das ist doch fast das Besipiel von ubuntuusers. Hast du deine quotes verlegt? Und warum das seltsame Ausgabeformat? Die Ausgabe von md5sum ist doch okay.

Code: Alles auswählen

find "$1" -type f -print0 | xargs -0 md5sum > "$2"

uname
Beiträge: 12403
Registriert: 03.06.2008 09:33:02

Re: md5sum

Beitrag von uname » 17.09.2013 23:00:09

Vielleicht ist es wirklich unnötig die Prüfsumme und den Dateinamen zu vertauschen. Ich dachte nur, dass es für den Vergleich evtl. besser wäre. Den find-Befehl hatte ich mir ohne Ubuntuusers so ausgedacht. Da ich noch aus 8.3-Zeiten von MS-DOS komme vermeide ich Sonderzeichen und Leerzeichen wo es nur geht.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: md5sum

Beitrag von Cae » 18.09.2013 00:12:50

Ich mag ja irren, aber will der TE einfach ein rekursives md5sum? Das tut das oben schon aehnlich erwaehnte

Code: Alles auswählen

$ find path/ -type f -exec md5sum '{}' \; >list
problemlos. Die Liste kann man am Ziel mit

Code: Alles auswählen

$ md5sum --check --quiet list
ueberpruefen.

Das mit der "Ordner-globalen" md5sum versteh' ich allerdings wirklich nicht. Wenn man Pruefsummen aller Teiler hat, dann braucht man keine Pruefsumme ueber alles zu berechnen. Dennoch, mit

Code: Alles auswählen

$ find path/ -type f -print0 | sort -z | xargs -0 cat | md5sum >list-global
ginge das. -print0, -z und -0 sorgen dafuer, dass Newlines in Dateinamen unverfaelscht verwendet werden; das sort braucht man, da find die Dateien in einer nicht vorhersagbaren Reihenfolge ausgibt [1].

Gruss Cae

[1] etwas inkorrekt, die Reihenfolge wird festgelegt in den Inodes. Solange man diese nicht veraendert (z.B. durch Umkopieren), ist die Reihenfolge immer dieselbe. Allgemein sollte man sich nicht darauf verlassen, und gerade bei dem beschriebenen Szenario wird ja explizit von zwei unabhaengigen Verzeichnisbaeumen ausgegangen.
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: md5sum

Beitrag von r900 » 18.09.2013 00:17:24

uname hat geschrieben:Den find-Befehl hatte ich mir ohne Ubuntuusers so ausgedacht.
Wollte dich nicht des Plagiats bezichtigen. ;) Egal wie man es selbst mit Dateinamen handhabt, Anführungszeichen gehören da schon hin.

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: md5sum

Beitrag von DEBIANUNDANDREAS » 18.09.2013 03:54:09

internet@andy-desktop:~$ md5sum --check --quit '/home/internet/list'
md5sum: Unbekannte Option »--quit«
„md5sum --help“ gibt weitere Informationen.

Leider war auch ein kleiner Irrtum bei mir.
Ich hatte die versteckten Dateien, und damit auch die Sicherungsdateien die gedit mit z.B Unbenanntes Dokument 3~,betitelt,übersehen.
Danke an alle, die hier gepostet haben
r900
Cae
Phineas
uname
Ich denke dieses Thema ist gelöst.

cronoik
Beiträge: 2049
Registriert: 18.03.2012 21:13:42
Lizenz eigener Beiträge: GNU Free Documentation License

Re: md5sum

Beitrag von cronoik » 18.09.2013 08:28:26

Hi,
DEBIANUNDANDREAS hat geschrieben:internet@andy-desktop:~$ md5sum --check --quit '/home/internet/list'
md5sum: Unbekannte Option »--quit«
„md5sum --help“ gibt weitere Informationen.
Da fehlt noch ein kleines e beim quit so das es ein quiet wird.
Hilf mit unser Wiki zu verbessern!

Antworten