Softlinks per Script in Unterordner

Insanic

Commander
Registriert
Jan. 2003
Beiträge
2.635
Hallo Leute,

gleich vorneweg, ich beschäftige mich hier zum ersten mal mit Linux und Scripten, hab aber schon seit Tagen alles aufgesaugt was es dazu bei google für Anfänger gibt, speziell Befehle, Shell, etc....
Ich brauch das demnächst für nen Arbeitslehrgang und wollte ein wenig die Unterlagen vorarbeiten um einen kleinen Vorteil zu haben :)

Ich brauche ein Script, was Softlinks auf das Script selbst in allen Unterordner des Script-Pfades erstellt (ich hoffe soweit verständlich).

Folgendes hab ich bereits in diversen Anleitungen und Hilfe Foren gefunden, umgebaut und getestet:

#!/bin/bash
for x in `find ./* -type d`;
do `ln -s script.sh $x`;
done

Es wird auch in allen Unterordnern "etwas" wie ein Link auf "script.sh" erzeugt (es kommt auch keine Fehlermeldung), allerdings haben alle Links in den Eigenschaften bei "Typ" stehen:

"Verknüpfung (fehlerhaft) (inode/symlink)"

Das Verknüpfungsziel wird auch richtig angegeben, aber beim Ausführen der Verknüpfung kommt die Meldung daß das Ziel nicht existiert. Zusätzlich ist ein Schloss an der Datei vorhanden, alle Rechte sind aber voll vorhanden.

Was ist falsch bzw. hab ich übersehen.

P.S. Ich verwende nur eine VirtualBox mit Ubuntu12.10, was anderes hatte ich auf die schnelle nicht zur Hand
P.P.S ....und ich habe schon keinen Bock mehr auf den Lehrgang.... :lol:
 
Hi

Du musst den absoluten Pfad zum Ziel (script.sh) angeben, ansonsten gehen die symbolischen Links davon aus, dass das Ziel mit im gleichen Ordner liegt.

[...]
do `ln -s /home/test/script.sh $x`;
[...]

Entsprechend anpassen.
 
Super Sache, klappt, viiiiiiielen Dank.

Leider wird das so nirgendwo genau erklärt, aber das macht natürlich dann Sinn.

Hab ich schon erwähnt das ich Linux nicht mag :D
 
Man kann den kompletten Pfad zum script auch noch dynamisch bestimmen lassen, da das ganze sonst recht unflexibel ist.
Code:
#!/bin/bash

dir=`dirname $0 | xargs readlink -f`

for x in `find $dir/* -type d`; do
        `ln -s $dir/script.sh $x`;
done
So kann man das Script von überall aus aufrufen und es auch in beliebige Ordner verschieben/kopieren.

"dirname $0" gibt den Pfad zurück in dem das Script liegt. Da dieser evtl. nur relativ ist, macht man mit "xargs readlink -f" einen absoluten daraus. Das ganze steht dann in der Variable $dir. Ruft man find mit kompletten Pfaden auf, liefert es die auch zurück, sodass in $x auch immer absolute Pfade stehen.

Ich hab für mich den Beschluss gefasst in Scripts eigentlich immer mit absoluten Pfaden zu arbeiten um einige Fehlerquellen per se auszuschließen.
 
Zurück
Oben