Shell: Prüfen ob es sich um einen Symlink handelt? (ksh)

Bei der Feststellung ob es sich um eine Datei oder einen Symlink handelt kann es zu Problemen bei dem grep Kommando kommen. Hier werden zwei Möglichkeiten aufgezeigt, wie geprüft werden kann ob es sich um einen Symlink handelt.

Das Directory Listing zeigt folgendes Bild.

In der Auflistung des Verzeichnis ist klar erkennbar das eine Symlink die Zeichen „->“ enthält.
Das Zeichen „>“ wird in der Shell zum aus- oder einleiten in Dateien verwendet wird, somit wären alle Einträge im Directory Listing mit der Zeichenfolge „-> Symlinks“.

Fehlerhaftes grep-Kommando, weil nicht einfach nach den Zeichen „>“ und „<" gesucht werden kann.

Abhilfe schafft hier die Verwendung von RegEx mit Hilfe der grep-Kommando Option -E und einem folgenden regulären Ausdruck.

Falsch wäre es einfach nur die Zeichenfolge „->“ in einen Teil des Regularen Ausdruck zu schreiben, weil das einer ODER-Verknüpfung gleichkommt und dann auch Dateien oder Directories mit einem „-“ im Namen oder in dem Fall der Schreibrechte gefunden werden.

Richtig ist es die zwingende Zeichenreihenfolge auch in den regulären Ausdruck zu übernehmen.

Kommando test nutzen

Am genausten kann mit dem Kommando test und dessen Option -L geprüft werden ob es sich um einen Symlink handelt.

Auszug aus der manpage des test Kommandos.

Lösung

Mit dem test-Kommando und dessen Option -L wird geprüft ob eine Datei ein Symlink ist, wenn das der Fall ist soll der Text „symlink“ ausgegeben werden, alternativ soll „no symlink“ ausgegeben werden, wenn es sich um keinen Symlink handelt.

Der Symlink wird als Symlink gekennzeichnet. Richtig!

Die Datei wird nicht als Symlink gekennzeichnet. Richtig!

Das Direcory wird nicht als Symlink gekennzeichnet. Richtig!

(Visited 176 times, 1 visits today)

1 Comment Shell: Prüfen ob es sich um einen Symlink handelt? (ksh)

  1. Mario Ohibsky

    Hallo,

    das Problem hatte ich mal auf ner Centos Maschine. Ich weiß aber nicht mehr wie ich das gelöst habe. Bestimmt weniger elegant als Deine Lösung. Danke dafür!

    Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.