Bernd Brodesser wrote (Sonntag, 25. November 2001 17:35):
* Markus Nohn schrieb am 25.Nov.2001:
wie kann ich mit Hilfe eines bash-skriptes in einem Verzeichnis das Dateien in mehreren Unterverzeichnissen enthält, immer das gleiche Wort in diesen Dateien durch ein anderes erstzen? Zum Beispiel soll "Tastatur" in allen Dateien durch "Keyboard" ersetzt werden.
find . <weitere Options> -exec sed "s/Tastatur/Keyboard/g"
Da fehlen aber zwei Dinge: ein exec in einem find muß mit einem \; abgeschlossen werden. Zweitens muß sed der Dateiname übergeben werden, was im exec durch den Ausdruck {} möglich ist. Das Problem ist nun, daß man mit sed eine Datei nicht direkt verändern kann, sodaß man eine temporäre Datei benötigt. Wenn man ein sed und ein mv im exec unterbringen will, kann man das über eine sub-bash machen (ungetestet): find . -exec bash -c "sed 's/Tastatur/Keyboard/g' \ <$0 >/tmp/replace.$$ && mv /tmp/replace.$$ $0'" {} \; Es geht auch mit einer for-Schleife, was vielleicht etwas verständlicher ist, aber bei Spaces in Filenames versagt: for f in `find .`; do sed 's/Tastatur/Keyboard/g' \ <$f >/tmp/replace.$$ && mv /tmp/replace.$$ $f ; done Grüße, Thomas.