특정 경로에서 발견된 모든 심볼릭 링크에 대한 정보를 어떻게 표시할 수 있습니까?

특정 경로에서 발견된 모든 심볼릭 링크에 대한 정보를 어떻게 표시할 수 있습니까?

주어진 경로에서 발견된 모든 심볼릭 링크에 대한 설명을 얻는 방법은 무엇입니까?

다음과 같은 출력이 예상됩니다.

$ 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, 또는 중 하나는 /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]?

관련 정보