깨진 심볼릭 링크를 한 번에 제거하는 방법은 무엇입니까?

깨진 심볼릭 링크를 한 번에 제거하는 방법은 무엇입니까?

나는 여러 로그 파일에 대한 심볼릭 링크를 만들었습니다. 로그 파일의 구문은 yyyymmdd.log.gz.

단순화하기 위해 다음과 같이 구문 분석하는 대신 간단한 시퀀스를 사용하고 있습니다 date.

for dd in $(seq -w 20150101 20151231) ; do 
     ln -s $origin/$dd.log.gz $target/$dd.log.gz
done

방금 생성한 깨진 심볼릭 링크를 모두 한 번에 삭제하려면 어떻게 해야 합니까?

답변1

이 간단한 한 줄짜리 작업은 즉시 수행됩니다. 이 필요GNU 찾기 도구:

find . -xtype l -delete

약간의 설명:

-xtype l끊어진 링크 테스트(반대 -type)

-delete 더 이상의 번거로움 없이 파일을 직접 삭제 xargs하거나-exec

참고: -xtype l은 -xtype을 의미합니다.소문자(좋다협회) ;)

답변2

find -L /path -type l -exec rm -i {} \;

를 사용하여 -L기호 find링크를 따라 테스트를 평가해 보세요 -type. 링크를 성공적으로 따라가면 해당 링크는 다음과 같습니다.아니요끊어지고 -type l테스트가 잘못됩니다(링크가 해결하는 내용에 대해 평가되기 때문입니다). 링크를 따라갈 수 없으면 링크가 끊어지고 테스트는 -type ltrue가 됩니다.

-type l테스트가 성공 하면 -exec rm {} \;끊어진 링크가 제거됩니다.

주로 Linux 사용자에게는 GNUism 사용을 권장하며 -xtype l, Solaris, FreeBSD 등 GNU가 아닌 UNIX 시스템에는 적합하지 않습니다.

답변3

With (실제로 코드에서 구문을 사용합니다 zsh. with 에서는 이러한 변수를 인용해야 합니다):zshbash

rm -- $target/*(-@)

또는:

rm -- $target/<20150101-20151231>.log.gz(-@)

*(@)일치 파일 형식심볼릭 링크. *(-@)여전히 유형인 것입니다.심볼릭 링크심볼릭 링크 확인 후(즉, 심볼릭 링크 대상을 확인할 수 없는 경우) 이는 GNU find의 와 동일합니다 -xtype l.

zshGNU 에서는 ln루프를 다음과 같이 작성하는 것이 좋습니다.

ln -srt $target -- $origin/<20150101-20151231>.log.gz

상대 경로를 포함하고 상대 심볼릭 링크를 생성 하더라도 $origin다음과 같은 경우 심볼릭 링크가 깨질 위험이 줄어듭니다.기원(그리고표적)은 향후 이름이 변경될 예정입니다.

답변4

다음은 주어진 타임스탬프에서 잘못된 명령으로 인해 모든 끊어진 링크가 생성된 경우 잘 작동합니다.

ls -lrt | grep "Sep 17 15:06" | awk '{print $9}' | xargs \rm

관련 정보