(상대적인 방법이 아닌) 절대적인 방법으로 대상을 식별하는 디렉토리의 모든 심볼릭 링크를 (재귀적으로) 감지하는 방법은 무엇입니까?
이러한 링크는 전체 디렉토리 트리를 이동할 때 깨질 가능성이 있으므로 이를 식별할 수 있는 방법이 필요합니다.
디렉토리 트리를 이동하면(디렉토리 트리의 루트 외부를 가리키는 경우) 상대 링크도 깨질 수 있지만 내 생각에는 이 작업이 다음에서 수행된 것 같습니다.이 문제.
답변1
절대 링크를 찾으려면 지원하는 경우 find
s 옵션을 사용할 수 있습니다 -lname
(적어도 GNU, FreeBSD 및 macOS에서는 사용 가능 find
).find
find . -type l -lname '/*'
이를 위해서는 쉘 와일드카드 일치를 사용하여 find
기호 링크의 파일 이름과 해당 내용(대상)을 인쇄 해야 합니다 /*
.
엄밀히 말하자면,/
POSIX는 1개 또는 3개 이상 으로 시작하는 절대 경로 이름을 지정합니다 ./
;그것과 일치시키기 위해 다음을 사용할 수 있습니다
find . -lname '/*' ! -lname '//*' -o -lname '///*'
//foo/bar는 /foo/bar와 어떤 시스템에서 다릅니까?자세한 내용이 있습니다.
(감사해요카츠라 사토-lname
이는 GNU에만 해당됨 을 나타냅니다 .FD0적어도 FreeBSD와 macOS에서도 실제로 사용할 수 있다는 점은 언급할 가치가 있습니다.스티븐 차제라스POSIX 절대 경로 이름 정의를 호출하는 데 사용됩니다. )
답변2
당신은 찾을 수 있습니다symlinks
유용한 유틸리티:
$ symlinks -r .
other_fs: /home/chazelas/test/bin -> /bin
dangling: /home/chazelas/test/DIR/foo -> foo
dangling: /home/chazelas/test/blah -> not-here
absolute: /home/chazelas/test/chazelas -> /home/chazelas
링크를 수정해 드릴 수 있습니다. -t
그게 뭔지 말해 주지회의하다:
$ symlinks -rct .
other_fs: /home/chazelas/test/bin -> /bin
dangling: /home/chazelas/test/DIR/foo -> foo
dangling: /home/chazelas/test/blah -> not-here
absolute: /home/chazelas/test/chazelas -> /home/chazelas
changed: /home/chazelas/test/chazelas -> ../../chazelas