Symbolische Links rekursiv ändern

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von xalo, 16.06.2010.

  1. xalo

    xalo Grünschnabel

    Dabei seit:
    16.06.2010
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo,

    ich möchte im Unix-Filesystem in einem Ordner mit Unterordnern alle symbolischen Links ändern bzw. eine Pfadangabe im symbolischen Link ersetzen.

    Beispiel:

    SymLink "aa --> /XX/aa" ändern nach "aa --> /YY/aa"

    Das ganze soll für alle symbolischen Links per Skript oder Befehlzeile funktionieren.

    Danke im Voraus...:)
     
  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 HBtux, 16.06.2010
    Zuletzt bearbeitet: 16.06.2010
    HBtux

    HBtux Linuxer

    Dabei seit:
    13.04.2010
    Beiträge:
    72
    Zustimmungen:
    0
    Ort:
    $HOME
    Sind die Verzeichnisnamen und die Zielnamen immer gleich?

    Also "XX" wird immer zu "YY" und "aa" zeigt immer im Unterverzeichnis auf "aa"?

    Oder sind noch mehrere Verzeichnisnamen im Spiel?

    Villeicht lieferst Du mal einige original Links ohne diese Pseudonamen....
    (meist sieht es mit richtigen Namen wieder ganz anders aus...)
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Bitte Script vorher an Test-Daten ausprobieren....
    Aktuell habe ich vorsichtshalber

    Code:
    find . -type l -exec ls -l {} \; | cut -d" " -f9,11 | while read linkname linkziel; do
    
            linkzielneu="`echo $linkziel | sed 's/\/XX\//\/YY\//g'`"
            echo Link $linkname zeigt nach $linkziel - ändern nach $linkzielneu
    
            # wenn Script OK das folgende echo vor dem rm Befehl und die Quotes vor und hinter den Befehlen entfernen.....
            echo "rm $linkname && ln -s $linkzielneu $linkname"
    
    done
    
     
  4. xalo

    xalo Grünschnabel

    Dabei seit:
    16.06.2010
    Beiträge:
    3
    Zustimmungen:
    0
    Also, die benötigten Anwendungsdaten mit den symbolischen Links liegen stets in "/usr/lpp/...".

    Ich befinde mich in einem beliebigen Ordner und habe folgende Symlinks:
    datei1 --> /PROD/usr/lpp/datei1
    datei2 --> /PROD/usr/lpp/datei2 ...

    Nun wird PROD in TEST geändert und die Software bekommt ein Problem, weil der Symlink immer noch auf PROD zeigt.

    Die Symlinks sollen richtig hingebogen werden:
    datei1 --> /TEST/usr/lpp/datei1
    datei2 --> /TEST/usr/lpp/datei2 ...

    Es würde auch reichen, den String "/PROD" aus den Symlinks zu entfernen. Dann wäre ich vom Systemnamen unabhängig, also:

    datei1 --> /usr/lpp/datei1
    datei2 --> /usr/lpp/datei2 ...

    Die Symlinks sollen auch in allen Unterordnern korrigiert werden...

    Ich hoffe, dass ich es einigermaßen darstellen konnte.
     
  5. #4 HBtux, 16.06.2010
    Zuletzt bearbeitet: 16.06.2010
    HBtux

    HBtux Linuxer

    Dabei seit:
    13.04.2010
    Beiträge:
    72
    Zustimmungen:
    0
    Ort:
    $HOME
    OK. - ich habe noch mal eine kleine Änderung gemacht.....
    • Parameter "maxdepth" - hierfür werden nur Links aus dem aktuellen Verzeichnis gefunden - nicht in Unterverzeichnissen.
    • und hinter dem Find-Befehl habe ich noch einen grep-Befehl eingebaut, damit wirklich nur die Links geändert werden, die nach /PROD/usr/lpp zeigen.
    Code:
    find . [B]-maxdepth 1[/B] -type l -exec ls -l {} \; | cut -d" " -f9,11 | [B]grep "\/PROD\/usr\/lpp\/"[/B] | while read linkname linkziel; do
    
            #ändern nach /usr/lpp/
            linkzielneu="`echo $linkziel | sed 's/\/PROD\/usr\/lpp\//\/usr\/lpp\//g'`"
    
            #alternativ ändern nach /TEST/usr/lpp/
            # linkzielneu="`echo $linkziel | sed 's/\/PROD\/usr\/lpp\//\/TEST\/usr\/lpp\//g'`"
    
            echo Link $linkname zeigt nach $linkziel - ändern nach $linkzielneu
    
            # wenn Script OK das folgende echo vor dem rm Befehl und die Quotes vor und hinter den Befehlen entfernen.....
            echo "rm $linkname && ln -s $linkzielneu $linkname"
    
    done
    
    Um das Script auszuführen, musst Du in dem Verzeichnis stehen, in dem sich die Link befinden....
     
  6. xalo

    xalo Grünschnabel

    Dabei seit:
    16.06.2010
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo HBtux,
    ich musste einige kleine Änderungen machen, weil "maxdepth" unbekannt war??? und habe zusätzlich awk benutzt:

    find . -type l -exec ls -l {} \; | awk '{print $9,$11}' | grep ...

    Ansonsten ist alle super. Danke für die schnelle Hilfe. :)
     
Thema: Symbolische Links rekursiv ändern
Besucher kamen mit folgenden Suchen
  1. windows symbolische verknüpfung rekursiv

Die Seite wird geladen...

Symbolische Links rekursiv ändern - Ähnliche Themen

  1. Kopieren von symbolischen links

    Kopieren von symbolischen links: Hallo, ich habe eine Verzeichnisstruktur mit diversen symbolischen links z.B.: . |-- dir1 | |-- sub1 | | |-- ln1 -> /home/foo/ln1 |...
  2. Symbolische Links auslesen

    Symbolische Links auslesen: Hallo ! Ich möchte mit diesem Skript alle Dead-Links (Symbolische Verweise ohne richtiges Ziel) im aktuellen Verzeichnis anzeigen. Mit readlink...
  3. Directory-Listung ohne symbolische Links

    Directory-Listung ohne symbolische Links: [gelöst] Directory-Listung ohne symbolische Links Hallo... ich habe ein Verzeichnis, in welchem sehr viele symbolische Links verlinkt sind....
  4. viele symbolische Links erstellen

    viele symbolische Links erstellen: viele symbolische Links erstellen [gelöst] Hi, ich habe vor alle Dateien eines bestimmten Typs (Bilder) in ein Verzeichnis zu verlinken. Die...
  5. unlink - Symbolische Links entfernen

    unlink - Symbolische Links entfernen: Hallo, ich möchte per Script alle in einem Verzeichnis liegenden Symbolischen Links entfernen. Ich habe es mit: unlink *ausprobiert -...