Seite 1 von 1

[gelöst] Pfadanggaben in Konfig-Dateien korrigieren

BeitragVerfasst: Nov 15th, '15, 16:15
von linuxfreund
Hallo allerseits,
schon immer gibt es in meinen PCs mehrere Linux-Root-Partitionen. Auf einer dieser Partionen läuft das produktive System, auf der Zweiten das zuvor genutzte System, auf der Dritten ein Testsystem. Mein persönliches Benutzerkonto hat immer den gleichen Namen. Um die Benutzerverzeichnisse zu unterscheiden, erfand ich eine zusätzliche Verzeichnisebene unterhalb der home-Partition.
Da gab es /home/mandriva/user, später /home/mageia/user. Zuletzt wechselte ich von Mageia1 direkt zu Mageia4. Mein Benutzerordner heißt heute /home/mageia4/user.
Für Mageia5 soll es wieder home/magiea/user heißen.
Leider schreiben viele Programme absolute Pfade in ihre Konfig-Dateien. Beim letzten Wechsel merkte ich viele Folgefehler erst mit der Zeit. Daher dachte ich jetzt, diese Korrektur automatisiert ausführen zu lassen. sed kann so etwas. Also mal im tmp-Ordner probieren:
Code: Alles auswählen
$ cp -av .jameica/cfg /tmp/jameica/
$ find /tmp/jameica/ -type f -exec sed 's/\/home\/mageia4\/user/\/home\/mageia\/user/g' {} \; > /tmp/jameica2/ 
bash: /tmp/jameica2/: Ist ein Verzeichnis
$ find /tmp/jameica/ -type f -exec sed 's/\/home\/mageia4\/user/\/home\/mageia\/user/g' {} \; > /tmp/jameica2/*

Jetzt steht eine einzige Datei "*" als Ergebnis.
Richtigerweise müsste jede eizelne Datei nach einer Korrektur zurückgeschrieben werden. Das geht vermutlich nur mit einem Skript, das mittels einer Schleife die sed-Prozedur für jede einzelne Datei aufruft.
Ist das korrekt? Wenn ja, ist dafür besser ein sed-Skript oder ein bash-Skript geeignet? Hat jemand ein konkretes Rezept für die zielgerichtete Korrektur der Pfadangaben?

Re: Pfadanggaben in Konfig-Dateien korrigieren

BeitragVerfasst: Nov 15th, '15, 17:04
von doktor5000
Zum einen, benutze bitte einen anderen Trenner anstatt / wenn man Pfadangaben bearbeitet. Was immer gut geht ist | oder auch @ weil das in sehr wenig Strings vorkommt. Also dann anstatt
Code: Alles auswählen
sed 's/\/home\/mageia4\/user/\/home\/mageia\/user/g'

etwa
Code: Alles auswählen
sed 's|/home/mageia4/user/|/home/mageia/user/|g'

Dann würde ich das mit Variablen machen, also
Code: Alles auswählen
sed "s|$HOME_ALT|$HOME_NEU|g"


Und zuletzt, definitiv ein bash-Skript weil find und sed allein dafür das falsche Mittel ist. Ich hätte ja erst grep -Rl $HOME_ALT auf das Verzeichnis gemacht,
so bekommst du alle Dateien zurück wo der alte String drin steht. (ist übrigens ein kleines L und kein grosses i)

Und dann sed -i.bak benutzt, so wird in-place ersetzt und du hast für jede Datei ein Backup.

Re: Pfadanggaben in Konfig-Dateien korrigieren

BeitragVerfasst: Jan 23rd, '16, 11:24
von linuxfreund
Inzwischen läuft mga5. Mein Benutzerordner heißt immer noch /home/mageia4/user. Denn ich stellte fest, dass die automatische Korrektur großer Verzeichnisse eine erhebliche Systembelastung darstellt. Abbrüche des Skripts können die Folge sein.
Betreffs genauer Formulierung der Befehlszeilen suchte und fand ich Unterstützung in der hiesigen LUG. Heraus kam dieses Skript:
Code: Alles auswählen
$ cat ~/Skripte/pfade_korrigieren.sh
#! /bin/bash
START_DIR="$1"
HOME_ALT="/home/mageia4/user/"
HOME_NEU="/home/mageia/user/"

for i in $(grep -rl $HOME_ALT $START_DIR) ;do sed 's|$HOME_ALT|$HOME_NEU|g' $i ;done

Mit dem eingangs dieses Freds beschriebenen Testordner funktioniert dieses Skript tadellos.

Re: Pfadanggaben in Konfig-Dateien korrigieren

BeitragVerfasst: Jan 23rd, '16, 11:29
von doktor5000
Bitte noch Thread als [gelöst] markieren, dazu den ersten Post editieren und dem Betreff ein [gelöst] voranstellen, Danke.

Re: [gelöst] Pfadanggaben in Konfig-Dateien korrigieren

BeitragVerfasst: Jan 23rd, '16, 11:34
von linuxfreund
Da war ich wohl nicht schnell genug! Wurde gleich anschließend erledigt. Inzwischen weiß ich doch, was sich gehört.