디렉토리에서 깨진 심볼릭 링크를 모두 식별하고 싶습니다.
더 나은 솔루션을 알지 못해서 다음과 같은 간단한 bash 한 줄짜리를 시도했습니다(bash 버전은 4.2.46이며 약간 구식이므로 언급할 가치가 있을 것입니다).
for f in $(ls); do test -L "$f" || continue; test -e "$f" || echo "$f deadlink"; done
불행히도 이것은 작동하지 않습니다. 이것을 실행하면 오류를 확인하려고 합니다.
for f in $(ls); do test -L $f && echo "$f is a valid symlink"; done
유효한 기호 링크가 존재하더라도 출력이 생성되지 않습니다. 동일한 명령을 실행하고 $f
실제 파일 이름으로 바꾸면 작동합니다. 또한 f=filename; test -L $f && echo "$f is a valid symlink";
예상대로 작동하므로 문제는 루프에 있는 것 같습니다.
내가 무엇을 놓치고 있나요?
답변1
ls
문제는 출력에 색상을 사용하는 데서 발생하는 것 같습니다 . 당신이 이래로구문 분석된 ls
출력, 색상이 출력되면 해당 이스케이프 코드 가 ls
주어진 값으로 끝나고 일치하는 파일을 찾을 수 없습니다. 이 경우 테스트는 출력 없이 실패 하므로 더 이상 현명해지지 않습니다.f
test
test
대신 glob을 사용하세요.
for f in *; do test -L "$f" || continue; test -e "$f" || echo "$f deadlink"; done
바라보다깨진 심볼릭 링크를 찾는 방법근본적인 문제에 대한 다른 가능한 해결책.