[bash] Bash 쉘 스크립트에 디렉토리가 있는지 어떻게 확인합니까?
Bash 쉘 스크립트 내에 디렉토리가 존재하는지 여부를 확인하는 데 사용할 수있는 명령은 무엇입니까?
답변
쉘 스크립트에 디렉토리가 있는지 확인하려면 다음을 사용할 수 있습니다.
if [ -d "$DIRECTORY" ]; then
# Control will enter here if $DIRECTORY exists.
fi
또는 디렉토리가 존재하지 않는지 확인하려면 다음을 수행하십시오.
if [ ! -d "$DIRECTORY" ]; then
# Control will enter here if $DIRECTORY doesn't exist.
fi
그러나 Jon Ericson이 지적했듯이 디렉토리에 대한 심볼릭 링크도이 검사를 통과하지 않으면 후속 명령이 의도 한대로 작동하지 않을 수 있습니다. 예를 들어 이것을 실행 :
ln -s "$ACTUAL_DIR" "$SYMLINK"
if [ -d "$SYMLINK" ]; then
rmdir "$SYMLINK"
fi
오류 메시지가 나타납니다.
rmdir: failed to remove `symlink': Not a directory
따라서 후속 명령에서 디렉토리가 필요한 경우 기호 링크를 다르게 처리해야 할 수 있습니다.
if [ -d "$LINK_OR_DIR" ]; then
if [ -L "$LINK_OR_DIR" ]; then
# It is a symlink!
# Symbolic link specific commands go here.
rm "$LINK_OR_DIR"
else
# It's a directory!
# Directory command goes here.
rmdir "$LINK_OR_DIR"
fi
fi
변수를 감싸는 데 사용되는 큰 따옴표를 특히주의하십시오. 이것에 대한 이유 는 다른 답변에서 8jean 에 의해 설명됩니다 .
변수에 공백이나 다른 특수 문자가 포함되어 있으면 스크립트가 실패 할 수 있습니다.
답변
Bash 스크립트에서 변수를 참조 할 때는 항상 큰 따옴표로 묶어야합니다. 요즘 아이들은 디렉토리 이름에 공백과 다른 많은 재미있는 캐릭터를 가질 수 있다는 생각으로 자랍니다. (공백! 나의 시대에, 우리는 공상 공간이 없었습니다!;))
어느 날, 그 아이들 중 한 명이로 $DIRECTORY
설정된 상태에서 스크립트를 실행 "My M0viez"
하면 스크립트가 폭발합니다. 당신은 그것을 원하지 않습니다. 이것을 사용하십시오.
if [ -d "$DIRECTORY" ]; then
# Will enter here if $DIRECTORY exists, even if it contains spaces
fi
답변
메모 -d 몇 가지 놀라운 결과를 생성 할 수 있습니다 테스트를 :
$ ln -s tmp/ t
$ if [ -d t ]; then rmdir t; fi
rmdir: directory "t": Path component not a directory
“디렉토리가 디렉토리가 아닌 경우”아래의 파일 대답 : “디렉토리에 대한 심볼릭 링크 인 경우” 약간 더 철저한 테스트 :
if [ -d t ]; then
if [ -L t ]; then
rm t
else
rmdir t
fi
fi
Bash 매뉴얼에서 Bash 조건식 과 [
내장 명령 및 [[
복합 명령 에 대한 자세한 정보를 찾을 수 있습니다 .
답변
나는 찾을 이중 브라켓 버전 test
로직 테스트를 더 자연스럽게 쓰는 브랜드를 :
if [[ -d "${DIRECTORY}" && ! -L "${DIRECTORY}" ]] ; then
echo "It's a bona-fide directory"
fi
답변
더 짧은 형태 :
[ -d "$DIR" ] && echo "Yes"
답변
디렉토리가 존재하는지 확인하려면 if
다음과 같은 간단한 구조를 사용할 수 있습니다 .
if [ -d directory/path to a directory ] ; then
# Things to do
else #if needed #also: elif [new condition]
# Things to do
fi
당신은 또한 부정적인 것으로 할 수 있습니다 :
if [ ! -d directory/path to a directory ] ; then
# Things to do when not an existing directory
참고 : 조심하십시오. 개폐식 버팀대 양쪽에 빈 공간을 두십시오.
동일한 구문으로 다음을 사용할 수 있습니다.
-e: any kind of archive
-f: file
-h: symbolic link
-r: readable file
-w: writable file
-x: executable file
-s: file size greater than zero
답변
-
디렉토리 또는 파일이 있는지 여부를 테스트하는 간단한 스크립트 :
if [ -d /home/ram/dir ] # For file "if [-f /home/rama/file]" then echo "dir present" else echo "dir not present" fi
-
디렉토리가 있는지 여부를 확인하는 간단한 스크립트 :
mkdir tempdir # If you want to check file use touch instead of mkdir ret=$? if [ "$ret" == "0" ] then echo "dir present" else echo "dir not present" fi
위의 스크립트는 디렉토리가 있는지 여부를 확인합니다.
$?
마지막 명령이 성공하면 “0”, 그렇지 않으면 0이 아닌 값을 반환합니다.tempdir
이미 존재 한다고 가정하십시오 . 그런 다음mkdir tempdir
아래와 같은 오류가 발생합니다.mkdir : ‘tempdir’디렉토리를 작성할 수 없습니다 : 파일이 존재합니다