Hallo M0J01812,
Folgendes Problem:
Ich muss über 7000 Dateien durchsuchen nach bestimmtem Inhalt
(Text1), wobei die Dateinamen variieren. Bei allen gefundenen
Dateien, welche Übereinstimmung aufweisen soll automatisch der
gefundene Dateiinhalt (Text1) gegen den neuen Inhalt (Text2)
ausgetauscht werden, wobei Speicherort und Name der Datei
nicht verändert werden dürfen.
Das ganze sollte in der Linux Shell funktionieren.
Dann würde ich eine Kombination aus den Befehlen find und sed nutzen.
Hier mal ein Muster für das Ersetzen mit sed für eine einzelne Datei:
sed -i ‘s/original\_word/new\_word/g’ file.txt
Damit sucht sed in der Datei file.txt nach ALLEN Vorkommnissen (/g für global) des Wortes „original_word“ und ersetzt es durch „new_word“.
Hier noch ein Beispiel für das Suchen von Dateien ohne einen Namen oder einen Teilnamen zu nutzen:
find . -type f
Das ist eine ganz simple Suchroutine, um innerhalb des Ordners, in dem man sich befindet (dafür steht der .), alle Dateien auffinden und deren Namen anzeigen zu lassen.
Wie sind denn die Dateien im System abgelegt?
Alle in einem Ordner oder in Unterordnern?
Hier bräuchte ich noch etwas Input, um auch den passenden Suchbefehl zu generieren.
Eine Möglichkeit, wenn alle Dateien innerhalb eines Ordners und ggf. in Unterordnern liegen würde so aussehen:
find . -type f -exec sed -i 's/bisher\ der\ alte/jetzt\ der\ neue/g' {} \;
Wichtig hier, die Leerzeichen innerhalb des sed Anweisung mit Backslashes zu escapen und das Leerzeichen nach den geschweiften Klammern.
Probier das doch mal in einem Ordner mit Testdateien aus.
Mit diesem Befehle erstellst Du Dir mal „schnell“ 1000 Testdateien in 10 Unterordnern:
for dir in `seq -w 1 10`;
do
# Ordnerstruktur erstellen
mkdir -p ~/sedTest/testdir$dir;
# Dateien mit Inhalt erstellen
for file in `seq -w 1 100`;
do
echo -e "Datei $file\n\nDatei Inhalt Original" \> ~/sedTest/testdir$dir/testfile$file;
done;
done;
Jetzt wechselst Du mit cd ~/sedTest in den neuen Ordner und lässt mal folgenden Befehl laufen:
find . -type f -exec sed -i 's/Datei\ Inhalt\ Original/Neuer\ Datei\ Inhalt/g' {} \;
Wenn Du möchtest, kann ich Dir hierfür gerne ein Shell Skript schreiben, ich bräuchte nur ein paar Info’s mehr. Darin musst Du nur noch die Textstellen eingeben, welche ersetzt bzw. wodurch sie ersetzt werden sollen ändern musst.
Ich hoffe Dir damit schon weitergeholfen zu haben.
Viele Grüße
Peter