Hallo zusammen,
ich möchte gern in einem Shell-Skript mit dem Befehl "find" Textdateien in einem Startverzeichnis und dessen Unterverzeichnissen finden und in diesen Dateien eine bestimmte Textstelle ändern.
Problem: In der Umgebung, in der ich arbeite, kennt der "find"-Befehl den Parameter "-execdir" nicht, sondern nur "-exec", und der "sed"-Befehl zum Ändern des Dateiinhalts kennt den Parameter "-i" nicht!
Damit bin ich gezwungen, die Dateien nach ihrer Änderung unter neuem Namen abzuspeichern, die Originaldatei zu löschen und die neue Datei umzubenennen. Dazu muss ich aber auf das jeweilige Verzeichnis zugreifen können, sonst passiert das alles im Startverzeichnis. Ich hatte vor, das mit einer "while read"-Schleife zu machen, scheitere aber an der Übergabe des jeweiligen Dateipfades. Wie kann ich das denn bewerkstelligen?
Folgende Beispielsituation:
Finden der Dateien:
Und für alle Treffer soll folgendes ausgeführt werden:
Für Ideen und Lösungsvorschläge wäre ich Euch sehr dankbar. :-)
Grüße,
Thomas
Eine Nacht drüber geschlafen, habe ich es nun doch selbst hinbekommen:
Vielleicht hilft es ja auch jemand anderem weiter.
Grüße,
Thomas
ich möchte gern in einem Shell-Skript mit dem Befehl "find" Textdateien in einem Startverzeichnis und dessen Unterverzeichnissen finden und in diesen Dateien eine bestimmte Textstelle ändern.
Problem: In der Umgebung, in der ich arbeite, kennt der "find"-Befehl den Parameter "-execdir" nicht, sondern nur "-exec", und der "sed"-Befehl zum Ändern des Dateiinhalts kennt den Parameter "-i" nicht!
Damit bin ich gezwungen, die Dateien nach ihrer Änderung unter neuem Namen abzuspeichern, die Originaldatei zu löschen und die neue Datei umzubenennen. Dazu muss ich aber auf das jeweilige Verzeichnis zugreifen können, sonst passiert das alles im Startverzeichnis. Ich hatte vor, das mit einer "while read"-Schleife zu machen, scheitere aber an der Übergabe des jeweiligen Dateipfades. Wie kann ich das denn bewerkstelligen?
Folgende Beispielsituation:
Code:
Startverzeichnis
|->Verzeichnis1
| |->test1.txt
|->Verzeichnis2
| |->test2.txt
|->Verzeichnis3
|->test3.txt
Finden der Dateien:
Code:
find . -name "*.txt"
Und für alle Treffer soll folgendes ausgeführt werden:
Code:
sed -e 's/Ausdruck_alt/Ausdruck_neu/g' < Dateiname1.txt > Dateiname1_neu.txt
rm Dateiname1.txt
mv Dateiname1_neu.txt Dateiname1.txt
Für Ideen und Lösungsvorschläge wäre ich Euch sehr dankbar. :-)
Grüße,
Thomas
Ergänzung ()
Eine Nacht drüber geschlafen, habe ich es nun doch selbst hinbekommen:
Code:
Dateien=($(find . -name "*.txt"))
for i in ${Dateien[@]}
do
Verzeichnis=$(dirname $i)
sed -e 's/Ausdruck_alt/Ausdruck_neu/g' < $i > $Verzeichnis/temp.txt
rm $i
mv $Verzeichnis/temp.txt $i
done
Vielleicht hilft es ja auch jemand anderem weiter.

Grüße,
Thomas