Dateien in md5sum umbenennen

14/12/2008 - 00:22 von Sven Schmieder | Report spam
Hallo Ng,

ich möchte alle Dateien eines Ordners in ihre md5sum umbenennen.
Also aus "log.txt" soll "md5sum.txt" werden.

Dachte so an diese Richtung:

#!/bin/sh

for file in *;
do
echo `md5sum * ` | mv *.txt [das was echo ausgegeben hat].txt
done

Aber das scheint grundlegend falsch zu sein. Habe zwar ein dickes
Buch "Shell-Programmierung" hier neben mir, aber so richtig hilfreich ist
das nicht.
Lieber als eine "schnelle" Lösung wàre mir eine, die Schritt für Schritt und
für mich verstàndlich ist. Das Script muss also nicht den
Geschwindigkeitsrekord brechen.

Danke für Eure Hilfe

Grüße
SS
 

Lesen sie die antworten

#1 Alexander Bartolich
14/12/2008 - 00:53 | Warnen spam
Sven Schmieder schrieb:
ich möchte alle Dateien eines Ordners in ihre md5sum umbenennen.
Also aus "log.txt" soll "md5sum.txt" werden.
[...]
Lieber als eine "schnelle" Lösung wàre mir eine, die Schritt für
Schritt und für mich verstàndlich ist.



Schritt 1: Schleife über alle Dateien

for file in *; do
echo "$file"
done

Schritt 2: In der Schleife md5sum aufrufen

for file in *; do
md5sum "$file"
done

Wenn du dir die Ausgabe ansiehst, besteht die aus zwei Spalten,
nàmlich Prüfsumme und Dateiname.

Schritt 3: Aus der Ausgabe von md5sum die Prüfsumme extrahieren.

for file in *; do
md5sum "$file" | cut -d ' ' -f1
done

Schritt 4: Ausgabe von md5sum in Variable speichern, diese Ausgeben

for old in *; do
new=` md5sum "$old" | cut -d ' ' -f1 `
echo "$new"
done

Schritt 5: Fertig

for old in *; do
new=` md5sum "$old" | cut -d ' ' -f1 `
mv "$old" "$new"
done

Das Script muss also nicht den Geschwindigkeitsrekord brechen.



Wenn man die Aufgabenstellung etwas einschrànkt, sieht dieser so aus:

md5sum * | sed 's/^\(.\{32\}\) *\(.*\)/mv "\2" "\1"/' | sh

Man kann md5sum mit beliebig vielen Dateinamen aufrufen, d.h. die
Schleife über alle Dateien dorthin verlagern.

Allerdings besteht dann die Ausgabe von md5sum aus mehreren Zeilen.
Diese könnte man nun in einer Schleife über alle Zeilen bearbeiten.
Allerdings ist es nicht schwer, aus der Ausgabe von md5sum den ge-
wünschten Aufruf von mv zu produzieren. Man muss dazu nur die beiden
Spalten vertauschen und "mv" davorschreiben. Das làsst sich mit sed,
awk (oder perl) erledigen.

Die Ausgabe von sed ist dann ein Shellskript, dass sich mit "sh"
ausführen làsst.

usingwhitespaceisracism

Ähnliche fragen