シンボリックリンクのターゲットのみを探す

シンボリックリンクのターゲットのみを探す

シェルスクリプトで使用するシンボリックリンクのターゲットを取得するコマンドラインメソッドを探しています。これまで私が見た最も近いのは、をstat -N src出力することですsrc -> dst。もちろん、出力を解析してターゲットを取得できますが、ターゲットをdst取得する直接的な方法があるかどうかを知りたいです。

答え1

readlink別のオプションは、可能であれば特別に設計されたコマンドを使用することです。

例えば

$ readlink -f `command -v php`
/usr/bin/php7.1

答え2

Mac OS XおよびFreeBSD/NetBSD/等から。それ:

stat -f %Y <filename>

より一般的には、解決策は次のとおりです(stat --printf = % Nは奇妙な引用符を使用します)。

ls -l b | sed -e 's/.* -> //'

例:

# ln -s a b
# stat -f %Y b
a

別の方法は次のとおりです。

# find b -maxdepth 0 -printf %l
a#

最後の行は改行がないので壊れました。しかし、変数に結果が必要な場合は、次のように問題ありません。

# f=$(find b -maxdepth 0 -printf %l)
# echo $f
a

ディレクトリの場合は、そのディレクトリに移動しないように-maxdepthしてください。findb

答え3

findこれはGNUを使用して行うことができますfind src -prune -printf "%l\n"

答え4

readlinkまたは、コマンドはありませんがstatPython 2.xを搭載したシステムでは、短いスクリプトを使用します。

#!/usr/bin/env python

import os, sys

if __name__ == "__main__":
    src = sys.argv[1]
    target = os.readlink(src)
    if not os.path.isabs(target):
            target = os.path.abspath(os.path.join(os.path.dirname(src), target))
    print target

これreadlink -fとは異なり、1つのレベルのシンボリックリンクのみに従うことができます。

関連情報