원형 심볼릭 링크는 어떻게 찾습니까?


12

HP-UX 시스템에서 작업 중이며 원형 심볼릭 링크가 있는지 알고 싶습니다.

지금까지 나는 명령을 사용하고 있습니다 :

ls -lrt  `find ./ -follow -type l`

그러나 결과적으로 현재 디렉토리에서 ls -lrt 만 수행합니다.

시스템에서 모든 원형 심볼릭 링크를 찾으려면 어떤 명령을 사용해야합니까?


1) find명령이 인쇄 .중이거나 인쇄 중이 아니기 때문에 현재 디렉토리를 얻습니다 (실행 중이 ls -lrt거나 실행 중임 ls -lrt .). find이 문제를 해결하는 방법을 알려주 는 HP-UX 에 대해 충분히 알지 못합니다 (명시 적 -print? ). 2) "원형"이란 무엇입니까? ./a -> ./b그리고 ./b -> ./a? 무엇에 대해 /home/foo/a -> /home? 또는 /home/foo/a -> /home/bar/home/bar/b -> /home/foo?
DerfK

원형으로 나는 루프를 만들 수있는 모든 종류의 링크를 의미 했으므로 위의 모든 것. 나는 지금 -print로 노력하고 있습니다.
블라디미르

또한 왜 -follow실제 링크를 포함시키지 않는 것이 결과입니까?
블라디미르

없이 -follow, find링크 자체를 검사하지 않는 파일이 가리키는. 그래서 그들이 가리키는 것을 보지 않고도 find . -type l(링크되어있는 -type l) 것을 인쇄합니다 ( 파일이나 디렉토리 또는 파일이나 디렉토리를 가리키는 다른 링크 일 것입니다).
DerfK

답변:


18

GNU find의 맨 페이지에 따르면 모든 POSIX에서 찾은 파일 시스템 루프를 감지하고 이러한 경우 오류 메시지가 표시된다고합니다.

find . -follow -printf ""

GNU의 형태의 루프를 찾을 수 있었다 발견에 ./a -> ./b./b -> ./a오류를 인쇄

find: `./a': Too many levels of symbolic links
find: `./b': Too many levels of symbolic links

(이것도 작업했습니다 a->b->c->a)

마찬가지로, 형태의 루프 ./foo/x -> .../foo/a -> ./bar+ ./bar/b -> ./foo오류를 인쇄

find: File system loop detected; `./foo/a/b' is part of the same file system loop as `./foo'.
find: File system loop detected; `./bar/b/a' is part of the same file system loop as `./bar'.
find: File system loop detected; `./foo/x' is part of the same file system loop as `.'.

출력 이외의 출력으로 무언가를 수행하려면 stderr에서 stdout으로 경로 재지 정하고 오류 메시지를 구문 분석 할 수있는 스크립트로 파이프해야합니다.


루프가 있으면 오류 메시지가 나타 납니까?
블라디미르

GNU find와 함께 -follow라면 가능합니다.
DerfK

좋아,하지만 어떻게 사용하지 ls않을 때 실제 링크를 얻는 대신 어떻게 얻는 지 설명 -follow합니까?
블라디미르

1
셸이 작동하는 방식입니다. ls명령의 출력을 사용하여 명령 을 실행하도록 요청했습니다 find. 귀하의 find쉘이 실행되도록 명령은 아무것도 인쇄되지 않은 ls현재 디렉토리를 나열 아무것도로.
DerfK

DerfK의 솔루션은 cygwin 쉘에서 호출하여 Windows 7에서주기를 찾습니다.
Don Gateley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.