심볼 링크가 있는지 확인하는 방법
bash에 심볼링크가 있는지 확인하려고 합니다.이게 내가 시도했던 것이다.
mda=/usr/mda
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
mda='/usr/mda'
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
하지만 그것은 효과가 없습니다.'!'를 생략하면 트리거되지 않습니다.그리고 '!'가 있으면 매번 트리거됩니다.
-L
는 "file"이 존재하며 심볼릭 링크인 경우 true를 반환합니다(링크된 파일은 존재하거나 존재하지 않을 수 있습니다).너는 원한다-f
(파일이 존재하며 일반 파일인 경우 true로 표시됨) 또는 단순히-e
(유형에 관계없이 파일이 존재하는 경우 true가 됩니다).
GNU의 manpage에 따르면-h
와 동일하다-L
단, BSD의 manpage에 따르면 BSD는 사용하지 마십시오.
-h file
true는 파일이 존재하며 심볼릭 링크인 경우입니다.이 연산자는 이전 버전의 프로그램과의 호환성을 위해 유지됩니다.그 존재에 의존하지 말고 대신 -L을 사용합니다.
심볼링크가 존재하는지, 그리고 심볼링크가 다음과 같이 끊어지지 않았는지 확인할 수 있습니다.
[ -L ${my_link} ] && [ -e ${my_link} ]
완전한 솔루션은 다음과 같습니다.
if [ -L ${my_link} ] ; then
if [ -e ${my_link} ] ; then
echo "Good link"
else
echo "Broken link"
fi
elif [ -e ${my_link} ] ; then
echo "Not a link"
else
echo "Missing"
fi
-L
는 심볼링크가 있는지, 끊겼는지 여부를 테스트합니다.와의 조합에 의해-e
링크가 유효한지 테스트할 수 있습니다(디렉토리 또는 파일에 추가).또한 링크가 존재하는지 아닌지를 테스트할 수 있습니다.
L은 파일이 존재하는지 테스트하는 동시에 심볼릭 링크이기도 합니다.
파일이 심볼릭 링크인지 테스트하지 않고 형식(파일, 디렉토리, 소켓 등)에 관계없이 존재하는지만 테스트하려면 -e를 사용합니다.
따라서 파일이 단순한 심볼릭링크가 아닌 실제 파일일 경우 이러한 모든 테스트를 수행하여 에러 상태를 나타내는 값을 가진 종료 상태를 얻을 수 있습니다.
if [ ! \( -e "${file}" \) ]
then
echo "%ERROR: file ${file} does not exist!" >&2
exit 1
elif [ ! \( -f "${file}" \) ]
then
echo "%ERROR: ${file} is not a file!" >&2
exit 2
elif [ ! \( -r "${file}" \) ]
then
echo "%ERROR: file ${file} is not readable!" >&2
exit 3
elif [ ! \( -s "${file}" \) ]
then
echo "%ERROR: file ${file} is empty!" >&2
exit 4
fi
어쩌면 이게 네가 찾고 있는 것일 수도 있어.파일이 존재하며 링크가 아닌지 확인합니다.
다음 명령을 사용해 보십시오.
file="/usr/mda"
[ -f $file ] && [ ! -L $file ] && echo "$file exists and is not a symlink"
를 사용하는 것은 어떻습니까?readlink
?
# if symlink, readlink returns not empty string (the symlink target)
# if string is not empty, test exits w/ 0 (normal)
#
# if non symlink, readlink returns empty string
# if string is empty, test exits w/ 1 (error)
simlink? () {
test "$(readlink "${1}")";
}
FILE=/usr/mda
if simlink? "${FILE}"; then
echo $FILE is a symlink
else
echo $FILE is not a symlink
fi
그 파일이 정말 심볼릭 링크인가요?그렇지 않은 경우, 일반적인 존재 여부는-r
또는-e
.
봐man test
.
먼저 다음과 같은 스타일을 사용할 수 있습니다.
mda="/usr/mda" if [ ! -L "${mda}" ]; then echo "=> File doesn't exist" fi
고급 스타일로 하려면 다음과 같이 쓸 수 있습니다.
#!/bin/bash mda="$1" if [ -e "$1" ]; then if [ ! -L "$1" ] then echo "you entry is not symlink" else echo "your entry is symlink" fi else echo "=> File doesn't exist" fi
위의 결과는 다음과 같습니다.
root@linux:~# ./sym.sh /etc/passwd
you entry is not symlink
root@linux:~# ./sym.sh /usr/mda
your entry is symlink
root@linux:~# ./sym.sh
=> File doesn't exist
파일 존재 여부를 테스트하는 경우 -e가 아닌 -L로 심볼 링크를 테스트합니다.
언급URL : https://stackoverflow.com/questions/5767062/how-to-check-if-a-symlink-exists
'programing' 카테고리의 다른 글
Enter 키를 누르지 않으면 Excel 값이 업데이트되지 않습니다. (0) | 2023.04.12 |
---|---|
함수 호출에서 **(이중 별/별표) 및 *(별/별표)는 무엇을 의미합니까? (0) | 2023.04.12 |
printf 문자 채우기 (0) | 2023.04.12 |
콘텐츠에 맞게 UITextView 크기를 조정하려면 어떻게 해야 합니까? (0) | 2023.04.12 |
Excel 연결 견적 (0) | 2023.04.12 |