[GELÖST] FOR IN Schleife mehrere Dateitypen vorgeben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
shakky4711
Beiträge: 215
Registriert: 09.09.2009 13:33:17

[GELÖST] FOR IN Schleife mehrere Dateitypen vorgeben

Beitrag von shakky4711 » 06.01.2013 12:58:34

Hallo,

ich sitze gerade an einem Script dass mir ein Verzeichnis durchsucht und von allen gefundenen Dateien md5 Prüfsummen in einzelnen Dateien erzeugt.
Das funktioniert soweit ganz gut

Code: Alles auswählen

for i in *.*; do md5sum -b "$i" > "$i".md5; done


Beim Verfeinern wird das Ziel verfolgt nur bestimmte Dateitypen zu erfassen um lediglich von den Audiodateien Prüfsummen zu erzeugen

Code: Alles auswählen

for i in *.flac; do md5sum -b "$i" > "$i".md5; done


Das findet logischerweise allerdings nur flac Dateien, es sind aber mitunter noch weitere Mediaformate vorhanden. Die eine Lösung wäre jetzt mehrere Schleifen nacheinander durchlaufen zu lassen die dann nach "mp3" "ogg" sucht, aber bestimmt gibt es da eine elegantere Lösung, ich habe es nur noch nicht hinbekommen :oops:


Danke für Eure Hilfe.

Gruß
Shakky
Zuletzt geändert von shakky4711 am 07.01.2013 15:55:39, insgesamt 1-mal geändert.

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: FOR IN Schleife mehrere Dateitypen vorgeben

Beitrag von Liffi » 06.01.2013 13:20:00

Ich habs jetzt nicht in der Bash versucht, aber in der ZSH geht folgendes:

Code: Alles auswählen

for i in *.{flac,mp3,ogg}

Benutzeravatar
Meillo
Moderator
Beiträge: 9261
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: FOR IN Schleife mehrere Dateitypen vorgeben

Beitrag von Meillo » 06.01.2013 13:54:09

shakky4711 hat geschrieben: ich sitze gerade an einem Script dass mir ein Verzeichnis durchsucht und von allen gefundenen Dateien md5 Prüfsummen in einzelnen Dateien erzeugt.
Das funktioniert soweit ganz gut

Code: Alles auswählen

for i in *.*; do md5sum -b "$i" > "$i".md5; done
Das `*.*' koennte Absicht sein um nur Dateien zu finden die einen Punkt enthalten, es koennte aber auch eine DOS-Gewohnheit sein. Dort braucht man `*.*' um alle Dateien zu erfassen. Bei Unix macht `*' das gleiche. Insbesondere erfasst es auch alle Dateien ohne Punkt im Dateinamen. (Versteckte Dateien werden in keinem der Faelle angezeigt. Fuer die ist ein explizites `.*' noetig.)

Das aber alles nur nebenbei.

Beim Verfeinern wird das Ziel verfolgt nur bestimmte Dateitypen zu erfassen um lediglich von den Audiodateien Prüfsummen zu erzeugen

Code: Alles auswählen

for i in *.flac; do md5sum -b "$i" > "$i".md5; done


Das findet logischerweise allerdings nur flac Dateien, es sind aber mitunter noch weitere Mediaformate vorhanden. Die eine Lösung wäre jetzt mehrere Schleifen nacheinander durchlaufen zu lassen die dann nach "mp3" "ogg" sucht, aber bestimmt gibt es da eine elegantere Lösung, ich habe es nur noch nicht hinbekommen :oops:
Die for-Schleife der Shell startet einen Durchgang fuer alle Worte zwischen dem Schluesselwort `in' und dem Strichpunkt. So kann man beispielsweise drei Durchgaeng so machen:

Code: Alles auswählen

for i in 1 2 3 ; do ... done
Oder alternativ so:

Code: Alles auswählen

for i in Eins Zwei Drei ; do ... done
Was zwischen `in' und dem Strichpunkt steht ist egal. Ob dazwischen Dateinamen expandiert werden (globbing mit * und ?) oder Kommandosubstitutionen stattfinden (mit $(...) oder `...`) oder auch dazwischen literale Worte gemischt sind ist egal. Du kannst also problemlos sowas machen:

Code: Alles auswählen

for i in Eins *zwei* Drei `cat vier` ; do ... done
Daraus folgt die Loesung auf deine Frage:

Code: Alles auswählen

for i in *.flac *.mp3 *.ogg ; do ... done
(Wobei Liffis Loesung ebenso richtig ist. Sie findet die gleichen Dateien, nur evtl. in anderer Reihenfolge.)
Use ed once in a while!

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

Re: FOR IN Schleife mehrere Dateitypen vorgeben

Beitrag von Phineas » 07.01.2013 04:29:52

Am Rande bemerkt:
In meinen Audio-Ordnern befinden sich die fiesesten Sonderzeichen in den Dateinamen. Ich würde also eine Lösung mittels find -exec bevorzugen und keine Schleife benutzen.

shakky4711
Beiträge: 215
Registriert: 09.09.2009 13:33:17

Re: FOR IN Schleife mehrere Dateitypen vorgeben

Beitrag von shakky4711 » 07.01.2013 15:55:00

Hallo,

vielen Dank Euch allen, insbesondere Meillo für die ausführliche Info, das klappt ja super

Code: Alles auswählen

for i in *.flac *.mp3 *.ogg ; do ... done
Manchmal kommt man auf die simpelsten Dinge nicht, hätte da eher die wildesten Klammer-Konstrukte erwartet.
In meinen Audio-Ordnern befinden sich die fiesesten Sonderzeichen in den Dateinamen.
Bei mir gibt es nur noch "a-z", "0-9", Minus und Unterstrich, alles andere wird bei mir gnadenlos weggeputzt :twisted:

Gruß
Shakky

Antworten