特定のパスで見つかったすべてのシンボリックリンクに関する情報をどのように表示できますか?

特定のパスで見つかったすべてのシンボリックリンクに関する情報をどのように表示できますか?

特定のパスで見つかったすべてのシンボリックリンクの説明を取得するには?

次の出力が予想されます。

$ linksinfo ~/.nix-profile/lib/libQt5OpenGL.so
/home is a directory
/home/nix is a directory
/home/nix/.nix-profile -> /home/nix/.nix-profile -> /nix/var/nix/profiles/default
/nix/var/nix/profiles/default/lib is a directory
/nix/var/nix/profiles/default/lib/libQt5OpenGL.so -> /nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1/lib/libQt5OpenGL.so
/nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1/lib/libQt5OpenGL.so -> libQt5OpenGL.so.5.3.1
/nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1/lib/libQt5OpenGL.so.5.3.1 is a file

答え1

簡単なスクリプトを作成しましょう。

#!/bin/bash            

mypath=$1
while [[ "${#mypath}" -gt 1 ]]; do
      file "$mypath"
      mypath="$(dirname $mypath)"
done

テスト:

$ ./linksinfo /usr/src/linux/kernel/../../../../bin/sh
/usr/src/linux/kernel/../../../../bin/sh: symbolic link to `bash'
/usr/src/linux/kernel/../../../../bin: directory
/usr/src/linux/kernel/../../../..: directory
/usr/src/linux/kernel/../../..: directory
/usr/src/linux/kernel/../..: directory
/usr/src/linux/kernel/..: directory
/usr/src/linux/kernel: directory
/usr/src/linux: symbolic link to `linux-3.14.14-gentoo'
/usr/src: directory
/usr: directory

編集する

これはすべてのパスコンポーネントを確認/表示するわけではありませんが、質問の出力もそうしません。たとえば、

/home/nix/.nix-profile -> /nix/var/nix/profiles/default

/nix、またはそのうちの1つは/nix/var/それ自体でリンクすることができます。ただし、出力はこのステップをスキップして確認のみを実行します。/nix/var/nix/nix/var/nix/profiles/nix/var/nix/profiles/default/nix/var/nix/profiles/default/lib

/nix/var/nix/profiles/default/lib/libQt5OpenGL.so -> /nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1/lib/libQt5OpenGL.so

今回も出力には、/nix/storeとの言及はありません/nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1。簡単に言えば、私はこれをもう一度考えて、あなたが本当に達成したいことが何であるかを考えてみることをお勧めします。たぶん簡単readlink [-f]か十分でしょうかrealpath [-e]

関連情報