Shellskript soll Verzeichnisse rekursiv 'abarbeiten'

H

Heather

Grünschnabel
Hallo,

ich habe ein kleines Shellskript, mit dem ich aus wav-Dateien mp3-Dateien erstelle. Dazu kopiere ich es immer in das Verzeichnis mit den wav-Dateien und führe es dort aus. Wie bekomme ich es hin, dass es auch alle Unterverzeichnisse berücksichtigt und die dort abgelegten wav-Dateien ebenfalls umwandelt und die mp3-Dateien in das gleiche Verzeichnis packt, in dem die dazugehörigen wav-Dateien liegen?

Hier ist das Skript:

Code:
#!/bin/bash
for i in *.wav;
do
  NAME_MP3=`basename "$i" wav`;
  lame -h -V 0 -S "$i" "$NAME_MP3"mp3 &
  while [ $((`ps -C lame | wc -l` - 1 )) -ge 2 ]; do sleep 1; done;
done
while [ $((`ps -C lame | wc -l` - 1 )) -ge 1 ]; do sleep 1; done;

Dabei ist wichtig, dass das Skript auch mit Dateien und Verzeichnissen klar kommen soll, in denen Leerzeichen vorkommen.

Wie mache ich das?

Inzwischen habe ich dieses Skript, aber das versagt bei den Leerzeichen:

Code:
#!/bin/bash

if [ "$#" -ne "1" ]
then
  echo "Fehler: es muss ein Verzeichnis angegeben werden"
  exit 1
fi


for i in `find "$1" -name "*.wav"`;
do
  DIRNAME=`dirname "$i"`
  NAME_MP3=`basename "$i" wav`;
  lame -h -V 0 -S "${i}" "${DIRNAME}/${NAME_MP3}mp3"
done

Danke und Gruß!
Heather
 
find (für rekursives Verzeichnis-durchforsten) in Verbindung mit xargs oder read (für Leerzeichen) solltest Du Dir anschauen. In der Regel tut's ein

Code:
find [DIR] -type f | while read file; do blabla file; done

Mehr dazu unter man find/xargs/read.

Gruss, Xanti
 

Ähnliche Themen

Skript soll nicht doppelt laufen... kill pkill pid cron

Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

Summe von Zahlen in einer Zeilen bilden

Shell Skript beschleunigen

HandbrakeCLI Shell Skript

Zurück
Oben