Links automatisch erstellen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Hoelsch, 04.09.2006.

  1. #1 Hoelsch, 04.09.2006
    Zuletzt bearbeitet: 04.09.2006
    Hoelsch

    Hoelsch Jungspund

    Dabei seit:
    04.09.2006
    Beiträge:
    18
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 04.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    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.
     
  4. #3 Hoelsch, 04.09.2006
    Zuletzt bearbeitet: 07.09.2006
    Hoelsch

    Hoelsch Jungspund

    Dabei seit:
    04.09.2006
    Beiträge:
    18
    Zustimmungen:
    0
    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(
     
  5. #4 Wolfgang, 07.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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:
    Wenn du drei Dateien mit Namen 1.wad 2.wad 3.wad hättest:
    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
     
  6. #5 Hoelsch, 07.09.2006
    Hoelsch

    Hoelsch Jungspund

    Dabei seit:
    04.09.2006
    Beiträge:
    18
    Zustimmungen:
    0
    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?
     
  7. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    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
     
  8. #7 Wolfgang, 07.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Ok, das macht Sinn. Und ein bisschen paranoid ist gesund ;)
     
  11. #9 Wolfgang, 07.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
Thema:

Links automatisch erstellen

Die Seite wird geladen...

Links automatisch erstellen - Ähnliche Themen

  1. Linksys-Router mit offizieller DD-WRT-Unterstützung

    Linksys-Router mit offizieller DD-WRT-Unterstützung: Linksys und NewMedia-NET haben die Linux-basierte alternative OpenSource-Firmware für WLAN-Router und eingebettete Systeme, »DD-WRT«, auch für die...
  2. Linksys WRT1900ACS fit für OpenWRT

    Linksys WRT1900ACS fit für OpenWRT: Im letzten Jahr hat Belkin mit dem Linksys WRT1900AC einen Nachfolger des in Open-Source-Kreisen beliebten WLAN-Routers WRT54G auf den Markt...
  3. Mozilla Foundation plant gesponsorte Links

    Mozilla Foundation plant gesponsorte Links: Mozilla plant, mit dem Einblenden von Werbeflächen zusätzliche Einnahmequellen zu erschließen, will dazu aber maßvoll vorgehen. Firefox-Nutzer...
  4. Linksys WRT 1900AC tritt in die Fußstapfen des WRT54G

    Linksys WRT 1900AC tritt in die Fußstapfen des WRT54G: Linksys, ein zu Belkin gehörender Hersteller von Netzwerkhardware für den Heimbereich, hat mit dem Linksys WRT 1900AC einen Nachfolger des in...
  5. Nützliche Links zu openSUSE

    Nützliche Links zu openSUSE: Nützliche Links zu openSUSE: Schickt mir doch bitte eine Private Nachricht, falls ihr noch zusätzliche Themen habt, die hier unbedingt aufgelistet...