나는 여러 로그 파일에 대한 심볼릭 링크를 만들었습니다. 로그 파일의 구문은 yyyymmdd.log.gz
.
단순화하기 위해 다음과 같이 구문 분석하는 대신 간단한 시퀀스를 사용하고 있습니다 date
.
for dd in $(seq -w 20150101 20151231) ; do
ln -s $origin/$dd.log.gz $target/$dd.log.gz
done
방금 생성한 깨진 심볼릭 링크를 모두 한 번에 삭제하려면 어떻게 해야 합니까?
답변1
답변2
find -L /path -type l -exec rm -i {} \;
를 사용하여 -L
기호 find
링크를 따라 테스트를 평가해 보세요 -type
. 링크를 성공적으로 따라가면 해당 링크는 다음과 같습니다.아니요끊어지고 -type l
테스트가 잘못됩니다(링크가 해결하는 내용에 대해 평가되기 때문입니다). 링크를 따라갈 수 없으면 링크가 끊어지고 테스트는 -type l
true가 됩니다.
-type l
테스트가 성공 하면 -exec rm {} \;
끊어진 링크가 제거됩니다.
주로 Linux 사용자에게는 GNUism 사용을 권장하며 -xtype l
, Solaris, FreeBSD 등 GNU가 아닌 UNIX 시스템에는 적합하지 않습니다.
답변3
With (실제로 코드에서 구문을 사용합니다 zsh
. with 에서는 이러한 변수를 인용해야 합니다):zsh
bash
rm -- $target/*(-@)
또는:
rm -- $target/<20150101-20151231>.log.gz(-@)
*(@)
일치 파일 형식심볼릭 링크. *(-@)
여전히 유형인 것입니다.심볼릭 링크심볼릭 링크 확인 후(즉, 심볼릭 링크 대상을 확인할 수 없는 경우) 이는 GNU find
의 와 동일합니다 -xtype l
.
zsh
GNU 에서는 ln
루프를 다음과 같이 작성하는 것이 좋습니다.
ln -srt $target -- $origin/<20150101-20151231>.log.gz
상대 경로를 포함하고 상대 심볼릭 링크를 생성 하더라도 $origin
다음과 같은 경우 심볼릭 링크가 깨질 위험이 줄어듭니다.기원(그리고표적)은 향후 이름이 변경될 예정입니다.
답변4
다음은 주어진 타임스탬프에서 잘못된 명령으로 인해 모든 끊어진 링크가 생성된 경우 잘 작동합니다.
ls -lrt | grep "Sep 17 15:06" | awk '{print $9}' | xargs \rm