シンボリックリンクのパストラッキング

シンボリックリンクのパストラッキング

リンク全体を印刷する追加のオプションでシンボリックリンクを解決したいと思います。たとえば、readlink -f "symlink2"リンクの各項目を報告するコマンドを実行したいと思います。つまり、「symlink2->symlink1->/path/file」シンボリックリンクを確認したい場合、上記のコマンドの結果は「/path/file」です。次のような出力を得たいと思います。

$readlink -f "symlink2
symlink1
/path/file

答え1

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

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

答え2

探していると思います。nameiutil-linux ファミリの一部であり、組み込み以外のすべての Linux システムで使用できます。

バラよりこのスレッドmacOSに対応する情報。これソースコード他のUnixバリアントで必要な場合は、ほとんど移植可能でなければなりません。

関連情報