-
-
Weiß nich ob ich deine Frage verstanden habe - wies aussieht haste ja auch ne Lösung , aber :
ln -s ../folder1/file1 ../folder2/folder3/file3 legt doch einen relativen Link namens file3 int den folder3 der in folder2 liegt , der wiederum parallel zu folder1 liegt .
Der Link zeigt RELATIV auf die Datei , die 2 Folder höher und wieder eins runter liegt und file1 heißt ... ( natürlich spezielle folder rauf und runter , sonst sähs anders aus )War das komplex genug , um sich an die Stirn zu tippen ???
HJS
-
also ein script kiddie weiß sowas nicht: Script-Kiddies sind leute die unbedingt 127.0.0.1 hacken wollen, aber immer dabei der PC abstürzt....;-)
-
Hallo Ronny,
ZitatOriginal von ronnykornexl
... Weiß, nicht ob "relativieren" der Ausdruck dafür ist...[für den Fall, daß Du alle Links relativ haben möchtest ...
Bash
Alles anzeigen#!/bin/bash dir=`pwd` # oder # dir="/.../..." for link in `find $dir -type l`; do echo "$link $(readlink $link)" | awk '{ link = split($1, l, "/"); ziel = split($2, z, "/"); if (length(z[1]) == 0) { if (link < ziel) min = link; else min = ziel; diff = 0; for (i = 1; (i <= min) && (diff == 0); i++) { if (l[i] != z[i]) diff = i; }; neu = z[diff]; for (i = diff + 1; i <= ziel; i++) { neu = neu "/" z[i] }; for (i = diff + 1; i <= link; i++) { neu = "../" neu }; cmdline = "ln -sf " neu " " $1; system(cmdline); } }' done
Es ist zwar kein 'Einzeiler' aber vielleicht hilfts ...
Hardy
-
-
Hallo slime,
ZitatOriginal von slime
HFlor:
respekt. die akw-zeile sieht nach ziemlich viel 'karate' aus.
wenn ich groß bin will ich das auch könnenso schlimm it das nicht, es sieht nur etwas schwierig aus. Zerlege doch einfach die Zeile von awk und Du wirst sehen, daß es recht einfach (und eventl. auch nicht optimal) ist ...
Code
Alles anzeigen{ # Link zerlegen link enthält die Anzahl der Pfadteile und l[] den Inhalt link = split($1, l, "/"); # Ziel des Link zerlegen ziel enthält die Anzahl der Pfadteile und z[] den Inhalt ziel = split($2, z, "/"); # ist es ein Absoluter Link? --> dann ist z[1] leer da $2 mit '/' beginnt if (length(z[1]) == 0) { # kleineren Wert der Pfadanteile bestimmen if (link < ziel) min = link; else min = ziel; diff = 0; # Erstes Auftreten von Unterschiede im Pfad suchen for (i = 1; (i <= min) && (diff == 0); i++) { if (l[i] != z[i]) diff = i; }; # ab der Position 'diff' sind die Pfade jetzt verschieden, jetzt wird daraus der relative Pfad neu = z[diff]; # alle noch vorhandenen Pfadteile des Ziel zusammenfügen for (i = diff + 1; i <= ziel; i++) { neu = neu "/" z[i] }; # wenn noch Pfadteile im Speicherort des Links vorhanden sind, so ist derern Anzahl nach 'oben' zu gehen ... for (i = diff + 1; i <= link; i++) { neu = "../" neu }; # Bastel des Befehls zum Erstellen des neuen (relativen) Links, Option 'f' ist zum Überschreiben des alten (absoluten) Links cmdline = "ln -sf " neu " " $1; # Ausführen ... system(cmdline); } }
Hardy
-
Demzufolge war nicht der Ansatz , sondern die Lösung gefragt ... --- Texte an der Kasse ---
HJS
-
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!