Hallo,
ich habe als Grundlage /home/vorlage und möchte daraus /home/individuell erzeugen.
Dazu müssen in diversen Konfig-Dateien die Pfade geändert werden - das macht z.B. dieser Einzeiler:
find /home/kopie_von_vorlage -type f -exec sed -i 's//home/vorlage//home/individuell/g' {} ;
Dummerweise ändert der aber das Dateidatum nicht nur bei den Dateien, wo die Pfade geändert werden müssen.
Das möchte ich verhindern und suche eine Lösung, die nur die Dateien anfasst, wo es nötig tut.
Weiß jemand, wie das hinzubekommen ist?
Danmke & Grüße,
Bernhard
Bernhard Bittner wrote:
Hallo,
ich habe als Grundlage /home/vorlage und möchte daraus /home/individuell erzeugen.
Dazu müssen in diversen Konfig-Dateien die Pfade geändert werden - das macht z.B. dieser Einzeiler:
find /home/kopie_von_vorlage -type f -exec sed -i 's//home/vorlage//home/individuell/g' {} ;
Dummerweise ändert der aber das Dateidatum nicht nur bei den Dateien, wo die Pfade geändert werden müssen.
Das möchte ich verhindern und suche eine Lösung, die nur die Dateien anfasst, wo es nötig tut.
Weiß jemand, wie das hinzubekommen ist?
find /home/kopie_von_vorlage -type f -exec sh -c "grep -q /home/vorlage '"{}"' && sed -i 's#/home/vorlage#/home/individuell#g' '"{}"'" ;
Kurz und gut: "erst schauen, dann ändern" nebst "ich verwende bei find im -exec den Dateinamen mehrfach" unter Berücksichtigung von "dann muss ich aber das {} irgendwie mehrfach in dem Kommando unterbringen" und einem "Dateinamen quoten kann nicht falsch sein, vielleicht ist ja auch mal ein Leerzeichen drin" sowie dem optionalen "sed kann auch ein anderes Trennzeichen als / verwenden, was extreme Backslasheritis verhindert"
Danmke & Grüße,
Bernhard
Ciao, Thomas
Am 05.06.2012, 09:52 Uhr, schrieb Thomas Köhler jean-luc@picard.franken.de:
Hallo Thomas,
snip
find /home/kopie_von_vorlage -type f -exec sh -c "grep -q /home/vorlage '"{}"' && sed -i 's#/home/vorlage#/home/individuell#g' '"{}"'" ;
Klingt besser, thx :-)
Allerdings stolpert grep noch über Leerzeichen in Unterordnern, woraus "Datei oder Verzeichnis nicht gefunden" resultiert.
Weißt Du hier auch noch Abhilfe?
Danke & Grüße,
Bernhard
Bernhard Bittner wrote:
Am 05.06.2012, 09:52 Uhr, schrieb Thomas Köhler jean-luc@picard.franken.de:
Hallo Thomas,
snip
find /home/kopie_von_vorlage -type f -exec sh -c "grep -q /home/vorlage '"{}"' && sed -i 's#/home/vorlage#/home/individuell#g' '"{}"'" ;
Klingt besser, thx :-)
Allerdings stolpert grep noch über Leerzeichen in Unterordnern, woraus "Datei oder Verzeichnis nicht gefunden" resultiert.
Weißt Du hier auch noch Abhilfe?
Ja, wirklich Zeichen für Zeichen copy&pasten und nicht irgendwas weglassen :-)
find /home/kopie_von_vorlage -type f -exec sh -c "grep -q /home/vorlage '"{}"' && sed -i 's#/home/vorlage#/home/individuell#g' '"{}"'" ; ^ *^ ^* * * *^ ^*^
Die hier mit ^ markierten " begrenzen das (aus mehreren Teilen zusammengesetzen) an sh übergebene Kommando, während die mit * markierten ' dann INNERHALB des am Ende von sh ausgeführten Kommandos den Dateinamen umschließen, womit Leerzeichen im Pfad kein Problem sind. Wenn du einen Fehler bekommst, hast du zuviel am Beispiel abgewandelt, und zwar an entscheidender Stelle, oder du hast ' in Dateinamen - pfui :-)
Danke & Grüße,
Bernhard
Ciao, Thomas
Am 05.06.2012, 14:12 Uhr, schrieb Thomas Köhler jean-luc@picard.franken.de:
Hallo Thomas,
snip
oh ja, mehrere Deppenapostrophen habe sich für schuldig erklärt.
thx again & Grüße,
Bernhard
Bernhard Bittner Bernhard.Bittner@gmx.net (Di 05 Jun 2012 09:32:48 CEST):
Hallo,
ich habe als Grundlage /home/vorlage und möchte daraus /home/individuell erzeugen.
Dazu müssen in diversen Konfig-Dateien die Pfade geändert werden - das macht z.B. dieser Einzeiler:
find /home/kopie_von_vorlage -type f -exec sed -i 's//home/vorlage//home/individuell/g' {} ;
find /home/… -type f -exec grep -q '/home/…' {} ; -exec sed -i '…' {} +
Gegenüber der Lösung vom Thomas: 2x -exec beim find. Das vermeidet die Quoting-Probleme, meine ich.
Hallo,
Am Dienstag, 5. Juni 2012 schrieb Bernhard Bittner:
find /home/kopie_von_vorlage -type f -exec sed -i 's//home/vorlage//home/individuell/g' {} ;
wie wär's denn damit, das Übel an der Wurzel zu packen und die Vorlage gleich so zu gestalten, dass nichts geändert werden muss?
Schließlich ist genau dafür das '~' erfunden worden -- alternativ gibt es auch noch ${HOME}.
Gruß Uwe
lug-dd@mailman.schlittermann.de