リンクされたリンクをテストする方法は?

リンクされたリンクをテストする方法は?

ファイルが他のリンクへのリンクであるかどうかをテストしたいと思います。 readlinkを試しましたが、必要な方法で動作しません。

[email protected],1:~/subdir1 $ ll
lrwxrwxrwx 1 pi pi   13 Apr 10 14:34 hellolink -> subdir2/hello
lrwxrwxrwx 1 pi pi    9 Apr 10 14:34 hellolink2 -> hellolink
drwxr-xr-x 2 pi pi 4096 Apr 10 14:33 subdir2

readlinkを使用すると、最終ターゲットの完全修飾形式または次のリンクのデフォルトのファイル名を取得できるようになりました。

[email protected],1:~/subdir1 $ readlink -f hellolink2
/home/ralph/subdir1/subdir2/hello
[email protected],1:~/subdir1 $ readlink hellolink2
hellolink

しかし、私にとって必要なのは、hellolink2が指すファイルのフルパスです。

/home/ralph/subdir1/hellolink

今私は次のようなことをしています。

if [ -h "$(dirname hellolink2)/$(readlink hellolink2)" ] ; then 
            echo hellolink2 is a link
fi

ループでこれを何度も実行し、findを使用してファイル名を指定すると、オーバーヘッドがたくさん発生するようです。

より簡単な方法がありますか?

ベストアンサー1

ファイルがシンボリックリンクであることを確認するには、test -L(readlinkなし)を使用してください。

if [ -L hellolink2 ]

ディレクトリシンボリックリンクの絶対パスを取得するには、 realpath を使用します。

$ realpath hellolink2
/home/ralph/subdir1/hellolink

おすすめ記事