Symbolische Links von ganzem Verzeichnis erstellen

Mittels des „ln“-Kommandos ist es unter Linux möglich symbolische Links zu erstellen. Das Kommando eignet sich dabei im ersten Moment nur für einzelne Dateien. Möchte man ganze Verzeichnisse behandeln, lohnt sich der Griff zu „lndir“. Unter Ubuntu muss das Kommando mit dem passenden Befehl nachinstalliert werden:

apt-get install xutils-dev

Anschließend kann „lndir“ genutzt werden:

lndir quellverzeichnis zielverzeichnis

In der Standardeinstellung gibt „lndir“ jedes verlinkte Verzeichnis aus, bis es mit dem gesamten Quellverzeichnis fertig ist. Der Parameter „-silent“ verhindert dies.

2 Kommentare » Schreibe einen Kommentar

  1. Ich glaube, du bringst hier etwas durcheinander. „ln“ legt standardmäßig keine symbolischen Verknüpfungen an, sondern Hardlinks — das ist prinzipiell einfach ein zweiter Dateiname für denselben Inhalt; Hardlinks können tatäschlich nicht für Verzeichnisse verwendet werden. Symbolische Links legt „ln“ nur an, wenn man es mit dem Parameter „-s“ explizit anfordert. Im Unterschied zum Hardlink stellt der Softlink (= symbolische Link) eine eigenständige Datei da, die den Pfad zur Zieldatei enthält. Der Unterschied wird besonders deutlich, wenn man die Links auflösen möchte: Während es unmöglich ist, festzustellen, auf welche Datei ein Hardlink „zeigt“ (denn jeder Hardlink ist ein gleichberechtigter, eigenständiger Dateiname), kann ein Softlink explizit per readlink(3) ausgelesen und sein Inhalt verwertet werden. Hardlinks können zudem nicht über Partitionsgrenzen hinweg angelegt werden, Softlinks dagegen schon — sie können sogar auf Ziele verweisen, die überhaupt nicht (mehr) existieren (sog. „kaputter Link“), was bei Hardlinks qua ihrer Natur nicht einmal denkbar ist.

    Daher: Symbolische Links für Verzeichnisse sind überhaupt kein Problem:

    $ ln -s /tmp ~/temp
    $ ls -l ~/temp
    lrwxrwxrwx 1 quintus users 4 19. Jan 20:25 /home/quintus/temp -> /tmp
    $ ls -l ~/temp/
    insgesamt 48
    -rw——- 1 quintus users 26832 19. Jan 17:48 gnc-report-9AQO9W.html
    -rw——- 1 quintus users 8819 19. Jan 17:48 gnc-report-XV3I9W.html
    -rw——- 1 quintus users 396 19. Jan 17:48 gnucash.trace
    drwx—— 2 quintus users 60 19. Jan 17:47 gpg-G4qKC7
    drwx—— 2 quintus users 40 1. Jan 1970 orbit-quintus
    -rw——- 1 quintus users 100 19. Jan 17:47 serverauth.EdA4uAiC9X
    drwx—— 2 quintus users 60 19. Jan 17:47 ssh-ewu8RFINytON
    drwx—— 3 root root 60 19. Jan 17:47 systemd-private-GTWgCP
    drwx—— 3 root root 60 19. Jan 17:47 systemd-private-kW6zyE
    drwx—— 3 root root 60 19. Jan 17:47 systemd-private-Rt4zkP
    $ rm ~/temp

    Grüße,
    Quintus

  2. Wenn ich den Text richtig interpretiere, kann lndir aber mit Verzeichnislisten umgehen, dh. Softlinks für alle Verzeichnisse unterhalb des Startverzeichnisses anlegen. Das lässt sie aber genauso gut mit einem ein- bis dreizeiligen Bashscript erledigen…

    Ad Hardlinks von Verzeichnissen: Ja, Linux verbietet das, weil die Gefahr von Datenverlust durch Fehlbedienung sehr hoch ist. Andere unixartige Betriebssystem erlauben das sehr wohl, und hier zeigt sich die Gefährlichkeit:

    Unter Solaris 10 (ausprobiert mit u9) geht das z.B. sehr wohl, mit folgenden Effekt:
    Wird ein Verzeichnis mit rm -r … gelöscht, löscht Solaris zuerst alle Dateien und Unterverzeichnisse, um schließlich beim Löschen des Verzeichnisseintrags selbst die Fehlermeldung auszugeben: „Cannot delete directory as it is a hard link.“ Aber die Dateien und Verzeichnisse drunter sind weg, unwiederbringlich!

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.