여기 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
확장을 사용하도록 설정해야합니다.
링크는 단호하고 상징적 인 링크입니다. 모든 링크가 다른 링크를 가리키는 지 확인하려면 전체 시스템의 모든 링크를 확인하고 지정된 대상을 가리키는 링크를 확인해야합니다. 기본적으로'find/-type l'을 수행하고 목표를 가리키는 각 파일 (수천 개가 될 것입니다)을 확인해야합니다. –
가능한 복제본 : https://stackoverflow.com/questions/6184849/symbolic-link-find-all-files-that-link-to-this-file –
@LeoIzen 나는 그것이 중복이라고 생각하지 않는다. – melpomene