2016-07-16 2 views
2

sardi 아이콘 테마에서 나는 원래 이미지에 대한 심볼릭 링크에 대한 심볼릭 링크가 있음을 발견했다.다른 심볼릭 링크를 가리키는 아이콘의 심볼릭 링크를 찾는 방법

ls -lR . | grep ^l | wc 

나를 보여줍니다 명령 난 3511 개 기호 연결 시간 5 개 아이콘 세트를 가지고있다. 15,000 개의 링크를 확인하십시오.

다른 기호 링크를 가리키는 모든 링크를 표시하는 방법은 있습니까?

+1

링크는 단호하고 상징적 인 링크입니다. 모든 링크가 다른 링크를 가리키는 지 확인하려면 전체 시스템의 모든 링크를 확인하고 지정된 대상을 가리키는 링크를 확인해야합니다. 기본적으로'find/-type l'을 수행하고 목표를 가리키는 각 파일 (수천 개가 될 것입니다)을 확인해야합니다. –

+0

가능한 복제본 : https://stackoverflow.com/questions/6184849/symbolic-link-find-all-files-that-link-to-this-file –

+0

@LeoIzen 나는 그것이 중복이라고 생각하지 않는다. – melpomene

답변

0

여기 find를 사용하는 솔루션의 일부 bash는 기능 :

shopt -s extglob 
find . -type l | while read -r; do 
    t="$(readlink "$REPLY")" 
    if [[ "$t" != /* ]]; then 
     t="${REPLY%%*([^/])}$t" 
    fi 
    [ -L "$t" ] && echo "$REPLY" 
done 

또는 전부를 한 줄에 :

find . -type l | while read -r; do t="$(readlink "$REPLY")"; if [[ "$t" != /* ]]; then t="${REPLY%%*([^/])}$t"; fi; [ -L "$t" ] && echo "$REPLY"; done 
  • find . -type l 모든 심볼릭 링크를 찾습니다.
  • 각 심볼릭 링크 $REPLY에 대해 $t을 사용하여 readlink을 사용합니다.
  • 대상이 절대 이름이 아닌 경우 (/으로 시작하지 않음) 원본 경로 $REPLY의 dirname 앞에 추가합니다 (표현식 ${REPLY%%*([^/])}은 슬래시가 아닌 모든 문자를 제거합니다).
  • 대상이 심볼릭 링크 인 경우 (-L) 원본 이름은 $REPLY입니다.

*([^/])을 사용하려면 extglob 확장을 사용하도록 설정해야합니다.

관련 문제