현재 디렉토리에서 모든 소프트 링크 (기호 링크)를 찾는 방법은 무엇입니까?


10

의 쉘 스크립팅과 관련된 질문입니다 bash.

현재 디렉토리 내에서 어떤 파일 이 소프트 링크인지 스크립트로 확인하는 방법 은 무엇입니까?

소프트 링크 라고 할 때 잘못된 용어를 사용한 경우을 사용하여 만든 파일을 참조합니다 ln -s.

내가 생각한 유일한 것은 ls -la표현 으로 평가 하고 결과를 파싱하는 것이지만, 이것이 최선의 해결책은 아닙니다.


1
"하드 링크"와는 달리 "기호 링크"라고합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

Righto, 나는, 나는 아마 용어 잘못있어 최대 헤드 주셔서 감사합니다 알고
bguiz

소프트 링크는 괜찮지 만 공간이 있습니다. :-) ( en.wikipedia.org/wiki/Symbolic_link )
Arjan

답변:



14

실제로 스크립트가 필요하지 않을 수 있습니다. 자식 폴더로 되풀이하지 않고 현재 폴더에만 심볼릭 링크를 표시하려면

찾기 . -최대 깊이 1-타입 l-인쇄

또는 더 많은 정보를 얻으려면 다음 중 하나를 사용하십시오.

찾기 . -maxdepth 1 -type l -exec ls -ld {} +
찾기 . -maxdepth 1-타입 l -print0 | xargs -0 ls -ld

말하자면 경우 파일이 심볼릭 링크가 하나가 사용할 수있는 readlink, 어떤 뜻을 출력 아무것도가 심볼릭 링크 아니라면. 다음 예제는 그다지 유용하지는 않지만 readlink일반 파일과 폴더를 무시 하는 방법을 보여줍니다 . 다음 중 하나를 사용하십시오.

찾기 . -maxdepth 1 -exec readlink {} +
찾기 . -maxdepth 1 -print0 | xargs -0 readlink

위의 것을 참고 -exec ... +하고 xargs ...훨씬 빠르게보다 -exec ... \;. 처럼:

시간 찾기 / usr / bin -maxdepth 1-타입 l -exec ls -ld {} \;
실제 0m0.372s
사용자 0m0.087s
시스 0m0.163s

시간 찾기 / usr / bin -maxdepth 1 -type l -exec ls -ld {} +
실제 0m0.013s
사용자 0m0.004s
시스 0m0.008s

시간 찾기 / usr / bin -maxdepth 1-타입 l -print0 | xargs -0 ls -ld
실제 0m0.012s
사용자 0m0.004s
시스 0m0.009s

나는 언젠가 쉘 스크립트 밖에서 그것을해야하기 때문에 Polsy의 대답이 더 좋았지 만 여전히 +1입니다.
bguiz

1
xargs가 반드시 필요한 것은 아닙니다. find를 사용할 수 있습니다. -maxdepth 1 -exec readlink {} \;
stib

사실, @stib하지만 xargs입니다 훨씬 빨리 내 맥은; 내 편집을 참조하십시오. 하지만 새로운 오늘 뭔가를 배웠 : 거기에 또한 +대신 \;(비록 일부 주장한다는 이있다 / 문제가 있었다 함께 grep.)
Arjan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.