Bash-Script: Schleife durch alle Unterverzeichnisse?
Hallo!
Ich versuche mich gerade an meinem ersten Bash-Skript, um massenhaft Textdateien zu ändern. Diese Funktion ist bereits einsatzbereit, jetzt fehlt für den Komfort noch, dass ich das Skript nur einmal auszuführen brauche, und es dann automatisch alle entsprechenden Dateien in allen Unterordnern findet und bearbeitet.
Das ist mein Skript:
WORKDIR=/01-Sessions/Abzuege
cd $WORKDIR
for i in *.ufraw;
do
ZEILE3=$(head -n3 "$i" | tail -1l)
echo " alter Pfad:" $ZEILE3
LAENGE=$(head -n3 "$i" | tail -1l | wc -m)
echo " Anzahl an Zeichen:" $LAENGE
NAME=$(echo $ZEILE3 | cut -c $(( ($LAENGE-29)))-$(( ($LAENGE-22) )) )
echo " RAW-File: " $NAME
sed -i '3d' "$i"
sed -i "3i\ ../Originale/$NAME.RAW" "$i"
ZEILE3=$(head -n3 "$i" | tail -1l)
echo " neuer Pfad:" $ZEILE3
done
2 Antworten
Hallo
*.ufraw ist doch kein Kommando. Meinst Du eher:
ls -1 *.ufraw
Was eine Auflistung aller Dateien bewirkt die nach einem Punk den String ufraw hat (cutechick.ufraw oder hairypussy.ufraw.jpg z.B.)
- Du willst einmal die 3. Zeile haben die in Variable $ZEILE3 stehen soll
- Dann nochmal Zeile 3, davon aber nur die Anzahl der Zeichen darin die in Variable $LAENGE stehen soll.
- Danach wird es krude, Du beginnst zu rechnen, mit Bytes und Zahlen (29 und 22) von denen ich nicht weiß woher die kommen.
Da Du gleich zweimal das annähernd gleiche Kommando benutzt:
head -n3 "$i" | tail -1l)
bietet es sich hier an, diesen Wert gleich in eine Variable zu schreiben um den Aufwand nicht mehrfach auszuführen.
LAENGE=$(echo $ZEILE3 | wc -m)
Zeig doch mal wie die Ausgangsdatei ist und im Gegensatz welche Informationen daraus wie aussehen sollen.
Linuxhase
Du kannst zum Einen alle zu behandelnden Dateien per ls auflisten und die Ausgabe als Argument für Dein Skript verwenden oder alle Verzeichnisse auflisten und jeweils die darin enthaltenen Dateien verarbeiten.
Kein Bedarf für Rekursion.