Links automatisch erstellen

H

Hoelsch

Jungspund
Hallo,
ich habe drei CS Server mit sv_downloadurl am lauen. So. Auf unserem alten Server war es automatisch so eingestellt, dass in allen Ordnern, woraus Dateien heruntergeladen wurden nicht die Dateien selbst drin waren, sondern links auf die Dateien, die auf dem Webserver liegen. Jetzt würde ich gerne ein Script schreiben/haben, was diese Links erstellt.

Die Dateien liegen in srv/www/htdocs/cstrike und dann meinetwegen im unterordner maps. Dann sollen von allen Dateien, die im Ordner Maps liegen Links erstellt werden und zwar im cstrike ordner vom gameserver, also in home/server/server1/cstrike/maps
home/server/server2/cstrike/maps
home/server/server3/cstrike/maps
usw. Dann muss ich nämlich alle Dateien immer nur noch einmal auf den Server laden und stündlich oder einmal am Tag werden dann die Links neu erstellt. Und alle Ordner sind gleich. Versteht ihr, wie ich das meine? Ist das möglich?

Vielen Dank schon mal.

MfG Hoelsch
 
Zuletzt bearbeitet:
Hallo
Hoelsch schrieb:
Ist das möglich?
Ja ;)
Was hast du bisher versucht, was geht nicht?
Schau dir mal zu folgenden die Manpage an:
find
ln
oder im Sonderfall xargs mit -print0 bei find

Daraus lässt sich sicher auch für dich etwas machen.
Keine fertige Lösung, aber grobe Anhaltspunkte:

  • mit find die Dateien ermitteln
  • mit ln den softlink erstellen
  • falls Sonderzeichen im Dateinamen vorkommen mit print0 und xargs arbeiten

Gruß Wolfgang
Wenn du nicht weiterkommst, poste deine bisherigen Versuche und dir wird sicher geholfen.
 
So,
ich sitz grad auf Arbeit und hab nichts zu tun. Also hab ich mir mal überlegt, wie das funktionieren könnte. Hab jetzt das ohne find gemacht...Der Befehl war mir dann doch zu "mächtig" :headup:
Code:
# Linkerstellungsscript
#
# 
quelle="/opt/lampp/htdocs/cstrike"
cs2="/home/server/server2/cstrike"
cs3="/home/server/server3/cstrike"
ln -s -f $quelle/*.wad $cs2
ln -s -f $quelle/sound/* $cs2/sound/
ln -s -f $quelle/maps/* $cs2/maps/
ln -s -f $quelle/*.wad $cs3
ln -s -f $quelle/sound/* $cs3/sound/
ln -s -f $quelle/maps/* $cs3/maps/

Würde das so funktionieren? Hab es halt noch nicht ausprobieren können, da ich hier nur Windoof Maschinen um mich rum habe X(
 
Zuletzt bearbeitet:
Hoelsch schrieb:
Code:
# Linkerstellungsscript
#
# 
quelle="/opt/lampp/htdocs/cstrike"
cs2="/home/server/server2/cstrike"
cs3="/home/server/server3/cstrike"
ln -s -f $quelle/*.wad $cs2
ln -s -f $quelle/sound/* $cs2/sound/
ln -s -f $quelle/maps/* $cs2/maps/
ln -s -f $quelle/*.wad $cs3
ln -s -f $quelle/sound/* $cs3/sound/
ln -s -f $quelle/maps/* $cs3/maps/

Würde das so funktionieren? Hab es halt noch nicht ausprobieren können, da ich hier nur Windoof Maschinen um mich rum habe X(

Nein das würde nicht so funktionieren.
Halte dir vor Augen, wie die Shell einen Befehl ausführt und es wird verständlich.

Zuerst werden nämlich die Wildcards aufgelöst, und dann das Ergebnis an den Befehl übergeben.
Was wird nun aus:
ln -s -f $quelle/*.wad $cs2

Wenn du drei Dateien mit Namen 1.wad 2.wad 3.wad hättest:
ln -s -f /opt/lampp/htdocs/cstrike/1.wad 2.wad 3.wad home/server/server2/cstrike

Da wird mit Sicherheit die Syntax beklagt werden, und nur funktionieren, wenn zufällig nur eine Datei vorgefunden wird.

Weiterhin kannst du keine Datei auf ein Verzeichnis verlinken.

Was ist an dem Befehl find so schlimm?
Es gibt dazu auch etliche Beispiele im Netz und sogar hier im Board.

Um z.B. mit Leerzeichen klarzukommen ein Beispiel mit xargs

Code:
quelle="/opt/lampp/htdocs/cstrike";
cs2="/home/server/server2/cstrike";
find $quelle -type f -print0|xargs -n1 -0|while read IN; do ziel="${IN##*/}"; ln -s $IN $csv$ziel;
 done

Gruß Wolfgang
 
Ich wollte ihm mit dem Befehl *.wad ja grade sagen, dass er von allen Wad-Dateien aus dem Verzeichnis /opt/lampp/htdocs/cstrike/ Links in das Verzeichnis /home/server/server2/cstrike erstellen soll. Wie muss der Befehl denn dann dafür aussehen?
 
Code:
find $quelle -iname "*.wad" -type f | while read IN; do ln -s $IN "$csv${IN##*/}"; done

Mehr dazu in man find.

@ Wolfgang:

Ist xargs in diesem Fall notwendig? find ... | while read funktioniert so auch mit Leerzeichen. Berichtige mich bitte, wenn ich was übersehen habe :)

Gruss, Xanti
 
Xanti schrieb:
Code:
find $quelle -iname "*.wad" -type f | while read IN; do ln -s $IN "$csv${IN##*/}"; done

Mehr dazu in man find.

@ Wolfgang:

Ist xargs in diesem Fall notwendig? find ... | while read funktioniert so auch mit Leerzeichen. Berichtige mich bitte, wenn ich was übersehen habe :)

Gruss, Xanti

While read schon, allerdings das find nicht wenn auch Sonderzeichen vorkommen. Ist aber nicht wirklich wichtig, weil ausser Leerzeichen wohl kaum praktisch andere vorzukommen scheinen. Halt ein wenig paranoid gecodet.
;)

Gruß Wolfgang
 
Wolfgang schrieb:
While read schon, allerdings das find nicht wenn auch Sonderzeichen vorkommen. Ist aber nicht wirklich wichtig, weil ausser Leerzeichen wohl kaum praktisch andere vorzukommen scheinen. Halt ein wenig paranoid gecodet.
;)

Gruß Wolfgang

Ok, das macht Sinn. Und ein bisschen paranoid ist gesund ;)
 
Hoelsch schrieb:
Ich wollte ihm mit dem Befehl *.wad ja grade sagen, dass er von allen Wad-Dateien aus dem Verzeichnis /opt/lampp/htdocs/cstrike/ Links in das Verzeichnis /home/server/server2/cstrike erstellen soll. Wie muss der Befehl denn dann dafür aussehen?
Und warum das nicht so geht, habe ich dir vorher gerade beschrieben.
Die Wildcard wird aufgelöst, bevor der ln -s seine Argumente bekommt!
Wenn du es noch nicht verstanden hast, dann lies es nochmal durch, und frag was du nicht verstanden hast nach.


Gruß Wolfgang
 

Ähnliche Themen

verzeichniss suche funktioniert nicht

Zurück
Oben