web-dev-qa-db-ja.com

シンボリックリンクのトレースルート

リンケージ全体を印刷する追加オプションを使用してシンボリックリンクを解決したいと思います。たとえば、リンケージの各エントリを報告するreadlink -f "symlink2"のようなコマンドを実行したいと思います。言い換えると、シンボリックリンク「symlink2-> symlink1->/path/file」を解決する場合、上記のコマンドの結果は「/ path/file」になり、次のような出力を探しています。

$readlink -f "symlink2
symlink1
/path/file
1
Hölderlin

これを行う1つの方法は、独自の再帰的なreadlinkを作成することです。

function readlinkWithPrint() {
    link=`readlink "$@"`
    [ -e "$link" ] && echo "$link"
    [ -h "$link" ] && readlinkWithPrint "$link"
}

これがテストです:

$ touch file
$ ln -s file symlink1
$ ln -s symlink1 symlink2
$ readlinkWithPrint symlink2
symlink1
file

残念ながら、この機能は非常に基本的なものです。 frist readlinkに提供するオプションは残りに伝播せず、さらに複数のファイルを読み取ることはできません。

2
ihato

私はあなたが探していると思います namei これはutil-linuxスイートの一部であり、すべての非組み込みLinuxシステムで利用できます。

MacOSに相当するものについては、 このスレッド を参照してください。 ソースコード は、他のUnixバリアントで必要な場合、ほとんど移植可能である必要があります。