PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash: Variablen aus anderer Datei



shifty
26-11-2007, 08:07
Hallo,

auch wenn ich kein Entwickler bin hoffe ich, hier trotzdem eine Frage stellen zu dürfen. Ich denke hier am ehesten eine Antwort bekommen zu können.

Ich habe bei viele Dateien ( >10.000) den Besitzer zu ändern.

Grundsätzlich möchte ich es folgender Weise machen:


find . -user idALT -exec chown idNEU {} \;

"Problem" nur dabei, ich muss nicht nur 1 oder 2 User tauschen, sondern deutlich mehr.

Ich wollte nun eine Datei anlegen die folgender Weise auufgebaut sein soll.

1;idALT;idNEU
2;idALT;idNEU
3;idALT;idNEU
.
.
.

Wie mache ich es nun, dass dem oben aufgeschrieben Befehl mitteile, dass er dort an die idALT und id NEU aus der von mir angelegten Datei zieht?

Und dann auch noch an der richtigen Stelle guckt. (Nimm idALT aus Zeile 1, Position 2 und idNEU aus Postition 3).

Und dann soll das Script die Datei abarbeiten bis zum Ende.

Für jede Hilfe, Idee, Link dankbar.

s.

peschmae
26-11-2007, 13:11
Hab gerade nich so viel Zeit, also mal ein Ansatz...



while read f; do
# hier ist jeweils in f das was in einer Zeile in der datei.txt steht
done < datei.txt
[/cdoe]

Dann musst du das Zeugs nur noch auseinandernehmen in der schleife:
[code]
TEIL1 = $(echo $f | sed 's#\(.*\);\(.*\);\(.*\)#\1#')
TEIL2 = $(echo $f | sed 's#\(.*\);\(.*\);\(.*\)#\2#')
TEIL3 = $(echo $f | sed 's#\(.*\);\(.*\);\(.*\)#\3#')


Alles ungetestet, geht sicher auch eleganter als mit Sed ;)

MfG Peschmä

shifty
26-11-2007, 15:16
hallo,

vielen Dank schon einmal.

So ganz ist mir noch nicht klar was ich tun muss.

Ich gebe allerdings auch zu, dass ich meine Kenntniss eher als "Grundkenntnisse" beschreiben würde.

Wenn du ein, zwei Sekunden hast würdes du einen Menschen sehr glücklich machen, wenn du ein Tick weiter ausholst.

VIELEN Dank im Voraus.

s.

BLUESCREEN3D
26-11-2007, 18:06
Ich gehe mal davon aus, dass du die Datei mit den IDs noch nicht angelegt hast.
Also mach das etwas einfacher:

alt neu
alt neu
alt neu

Und dann einfach dies in der bash eintippen:

while read alt neu; do
echo find . -user $alt -exec chown $neu {} \;
done < datei

Das gibt erstmal nur die Befehle aus. Wenn alles richtig aussieht, kannst du das "echo" entfernen.

shifty
26-11-2007, 20:35
danke!

das klappt.

Mensch, so einfach kann es sein. Ich dachte ich müsse ihm irgendwie genauer sagen welche Daten er nehmen muss und dann geht das so einfach.

War schon drauf und dran was mit cut zu basteln :) (cut -d , -f 1 .... cut -d , -f 2.... )

Aber so ist es ja wesentlich besser!

ich danke noch einmal!

s.