Bash에 파일이나 디렉토리가 있는지 확인하는 방법

Bash에 파일이나 디렉토리가 있는지 확인하는 방법

2022-06-01 last update

13 minutes reading bash terminal
셸 스크립트를 작성할 때 파일에 따라 작업을 수행해야 하는 경우가 많습니다.Bash에서는 test 명령을 사용하여 파일이 존재하는지 확인하고 파일의 형식을 확인할 수 있습니다.test 명령은 다음과 같은 문법 형식 중 하나를 사용합니다.
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
스크립트의 이식성을 원한다면 이전 test[ 명령을 사용하는 것이 좋습니다. 이 명령은 모든 POSIX 셸에 사용할 수 있습니다.대부분의 Bash, Zsh, Ksh를 기본 셸로 사용하는 현대 시스템은 테스트 명령의 새로운 업그레이드 버전 [[ (괄호) 을 지원합니다.

파일이 있는지 확인

파일이 있는지 확인할 때 가장 자주 사용하는 파일 연산자는 -e-f 입니다.첫 번째는 파일이 존재하는지 확인하고, 형식에 상관없이, 두 번째는 파일이 일반 파일 (디렉터리나 장치가 아닌) 일 때만true로 되돌아옵니다.파일이 존재하는지 확인할 때 가장 읽을 수 있는 옵션은 test 명령과 if statement
. 다음 코드 세그먼트는 /etc/resolv.conf 파일이 있는지 확인합니다.
FILE=/etc/resolv.conf
if test -f "$FILE"; then
    echo "$FILE exists."
fi
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exists."
fi
FILE=/etc/resolv.conf
if [[ -f "$FILE" ]]; then
    echo "$FILE exists."
fi
파일의 존재 여부에 따라 다른 작업을 수행하려면 If/then 구조를 사용하십시오.
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exists."
else 
    echo "$FILE does not exist."
fi
항상 사용double quotes
이름에 공백이 있는 파일을 처리하는 동안 문제가 발생하지 않도록 합니다.if 문장을 사용하지 않고test 명령을 사용할 수 있습니다.당 exit status 연산자만
test -f /etc/resolv.conf && echo "$FILE exists."
[ -f /etc/resolv.conf ] && echo "$FILE exists."
[[ -f /etc/resolv.conf ]] && echo "$FILE exists."
&& 조작부호 다음에 일련의 명령을 실행하려면 && 또는 ; 구분된 괄호 안에 명령을 묶어야 한다.
[ -f /etc/resolv.conf ] && { echo "$FILE exist."; cp "$FILE" /tmp/; }
&& 와 상대하면 테스트 명령의 종료 상태가 && 일 때|| 조작부호 뒤에 있는 문장만 실행된다.
[ -f /etc/resolv.conf ] && echo "$FILE exist." || echo "$FILE does not exist."

디렉터리가 있는지 확인하기

연산자false를 사용하여 파일이 디렉토리인지 여부를 테스트할 수 있습니다.예를 들어, -d 디렉토리가 있는지 확인하려면
FILE=/etc/docker
if [ -d "$FILE" ]; then
    echo "$FILE is a directory."
fi
[ -d /etc/docker ] && echo "$FILE is a directory."
또는 중괄호 /etc/docker 가 아닌 중괄호 [[ 를 사용할 수 있습니다.

파일이 없는지 확인

다른 언어와 비슷하고[(감탄부호) 논리 not 연산자를 사용할 수 있습니다:
FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE does not exist."
fi
테스트 표현식에 대한 반발, 위에서 말한 바와 같이:
[ ! -f /etc/docker ] && echo "$FILE does not exist."

여러 파일이 있는지 확인

복잡한 플러그인if/else 구조를 사용하지 않고, !(또는 -awith&&를 사용하여 여러 파일이 있는지 테스트할 수 있습니다:
if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then
    echo "Both files exist."
fi
if [[ -f /etc/resolv.conf && -f /etc/hosts ]]; then
    echo "Both files exist."
fi
등효 변체를 사용하지 않고if문장:
[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "Both files exist."

파일 테스트 조작부호

test 명령은 다음과 같은 파일 조작부호를 포함하여 특정 유형의 파일을 테스트할 수 있습니다.
  • [[-b - 파일이 존재하고 특수한 블록 파일이면 True입니다.
  • FILE-c - 파일이 존재하고 특수 문자 파일인 경우 True입니다.
  • FILE-d - 파일이 존재하고 디렉토리인 경우 True입니다.
  • FILE-e - 파일이 존재하고 파일인 경우 유형(노드, 디렉토리, 소켓 등)을 고려하지 않고 True입니다.
  • FILE-f - 파일이 존재하고 일반 파일(디렉토리나 장치가 아님)인 경우 True입니다.
  • FILE-G - 파일이 존재하고 명령을 실행하는 사용자와 같은 그룹이 있는 경우 True입니다.
  • FILE-h - 파일이 존재하고 기호 링크인 경우 True입니다.
  • FILE-g - 파일이 존재하고 그룹 idFILE 로고가 설정된 경우 True입니다.
  • sgid-k - 파일이 존재하고 점착 위치 플래그가 설정된 경우 True입니다.
  • FILE-L - 파일이 존재하고 기호 링크인 경우 True입니다.
  • FILE-O - 파일이 존재하고 명령을 실행하는 사용자가 소유한 경우 True입니다.
  • FILE-p - 파일이 존재하고 파이프인 경우 True입니다.
  • FILE-r - 파일이 존재하고 읽을 수 있는 경우 True입니다.
  • FILE-S - 파일이 존재하고 소켓인 경우 True입니다.
  • FILE-s - 파일 크기가 0이 아닌 경우 True입니다.
  • FILE-u - 파일이 존재하면 True이고 set user id(FILE 로고가 설정됩니다.
  • suid-w - 파일이 존재하고 쓰기 가능한 경우 True입니다.
  • FILE-x - 파일이 존재하고 실행 가능한 경우 True입니다.
  • 결론

    이 안내서에서 Bash에 파일이나 디렉터리가 있는지 확인하는 방법을 보여 줍니다.(adsbygoogle=window.adsbygoogle | |[]).푸시({});질문이나 피드백이 있으면 언제든지 의견을 발표하십시오.