Page 1 of 1

SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-03 15:45
by ice
Folgendes nicht gerade abwegiges Problem:

Ich möchte mehrere Versionen einer Software installieren und natürlich nicht diese zigmal kopieren. Ich möchte die Kopien aus symlinks erstellen.

Grundsätzlich kein Problem, wenn es um ganze Verzeichnisse geht aber wenn ich jetzt ein Verzeichnis mit 100 Dateien habe und darin nun eine config liegt, die eine echte Datei sein muss, da diese für die Programmkopie die Einstellungen enthält, muss ich ja 100 symlinks von hand anlegen.

Da ich aber faul bin und Linux für mächtiger halte muss es dafür doch eine andre Lösung geben. Ich stelle mir soetwas wie ein automatisches Erzeugen von Link von einfach allen in den Verzeichnissen befindlichen Dateien vor, also der Parameter -R bei den meisten Programmen.

Nun steht in "man ln" soetwas wie "ist die letzte Angabe eine bestehendes Verzeichnis, werden rekursiv für alle Dateien der Verzeichnisse Links erstellt..." Das hat bei meinen Versuche aber nicht geklappt. Hab ichs falsch verstanden oder nicht die richtige Syntax benutzt?

Hat jemand mehr Kenntnisse über ln ?

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-03 15:48
by dodolin
Linke auf das Verzeichnis, das sollte schon ausreichen.

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-03 16:02
by ice
nicht
ICE wrote:wenn ich jetzt ein Verzeichnis mit 100 Dateien habe und darin nun eine config liegt, die eine echte Datei sein muss,
Entschuldige Du hast das Problem nicht erkannt, oder ich hab mich blöd ausgedrückt.

Es geht um die Verzeichnisse, die ich nicht komplett linken kann.

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-03 16:48
by dodolin
Sorry, dann hatte ich dich in der Tat nicht richtig verstanden. Ist halt nicht immer so einfach... :wink:
NAME
ln - make links between files

SYNOPSIS
ln [OPTION]... TARGET [LINK_NAME]
ln [OPTION]... TARGET... DIRECTORY
ln [OPTION]... --target-directory=DIRECTORY TARGET...

DESCRIPTION
Create a link to the specified TARGET with optional
LINK_NAME. If LINK_NAME is omitted, a link with the same
basename as the TARGET is created in the current direc­
tory. When using the second form with more than one TAR­
GET, the last argument must be a directory; create links
in DIRECTORY to each TARGET.
Create hard links by
default, symbolic links with --symbolic. When creating
hard links, each TARGET must exist.
Ich habe mal fettgemacht, was du suchst.

Jetzt brauchst du nur noch einen Mechanismus, der dir die zu linkenden Dateinamen ausgibt, den du dann über Backticks ` einbaust. Das könnte z.B. ein ls in Verbindung mit den nötigen RegEx' sein, die auf die gewünschten Dateinamen matcht.

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-03 17:28
by ice
8O Und das jetzt bitte mal für nen Dummen. :?

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-03 17:43
by dodolin
*LOL*

Beispiel:

Code: Select all

[dominik@sklave dominik]$ cd /tmp
[dominik@sklave /tmp]$ ls /home/www/public/
crypt.html         htpasswd.users  links.txt  urls_linux_buecher.txt
firewall-rules.sh  index.html      old.html
html               info.php        secure
[dominik@sklave /tmp]$ mkdir symlinks
[dominik@sklave /tmp]$ ln -s `ls /home/www/public/*.html` symlinks/
[dominik@sklave /tmp]$ cd symlinks/
[dominik@sklave symlinks]$ ls -l
total 0
lrwxrwxrwx    1 dominik  users          27 Apr  3 17:41 crypt.html -> /home/www/public/crypt.html
lrwxrwxrwx    1 dominik  users          27 Apr  3 17:41 index.html -> /home/www/public/index.html
lrwxrwxrwx    1 dominik  users          25 Apr  3 17:41 old.html -> /home/www/public/old.html
Du musst halt ein ls Kommando finden, welches dir genau die gewünschten Dateien ausspuckt. Ich habe ja keine Ahnung, wie das konkret bei dir aussieht...? Du kannst ja das ls Kommando auch "pur" testen, also ohne das ln aussenrum. Und wenn dann alles passt, setzt du es ein.

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-03 19:05
by ice
Mann sauber das ists ja schon.

Ich mach einfach *.* draus. Es sind nur 2-3 Feilen, die echt sein müssen.

Ich danke Dir.

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-03 19:08
by captaincrunch
Ich mach einfach *.*
Ein Sternchen sollte genügen ... wir sind hier ja nicht bei Betriebssystemen aus Redmont ... :wink:

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-04 08:57
by ice
:oops: Schande auf mein Haupt. Ich reiss mich jetzt mal zusammen.

hüfp -> debian Installer

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-04 18:08
by thorsten
das Problem hatte ich gestern auch bei der Installation von mysql 4.0.12 ;)

Das hab ich mir ausgedacht:

Code: Select all

# cd /usr/local/bin
# for i in /usr/local/mysql/bin/*  ; do ln -s "$i" $(basename "$i" ) ; done
Aber das ist noch genialer, hätte die man-page mir auch verraten können:

Code: Select all

# cd /usr/local/bin
# for i in /usr/local/mysql/bin/*  ; do ln -s "$i" ; done
Sieht zwar umständlicher aus, als das da oben, aber evtl. bekommt ja der ein oder andere eine Eingebung dadurch 8)

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-08 15:59
by Anonymous
Wäre ein lndir nicht viel einfacher?

LNDIR(1) LNDIR(1)

NAME
lndir − create a shadow directory of symbolic links to another direc‐

tory tree

....

If you add files, simply run lndir again. New files will be silently
added. Old files will be checked that they have the correct link.
....

If a file in fromdir is a symbolic link, lndir will make the same link
in todir rather than making a link back to the (symbolic link) entry in
fromdir. The −ignorelinks flag changes this behavior.

Re: SymLinks automatisch erzeugen: ln -s /verz/* /verz/* ??

Posted: 2003-04-08 21:17
by thorsten
JO DA IST DER BEFEHL!

Danke, ich hab gehofft jemand äußert sich dazu. Den lndir hab ich mal bei einem Bekannten gesehen, mich aber nicht mehr an den Namen erinnert :roll: