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


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.