SW/리눅스

Linux : Bash : 파일, 디렉토리인지 확인하는 방법, 예제, 명령어

얇은생각 2021. 7. 2. 07:30
반응형

셸 스크립트를 작성할 때 여러 번 파일의 존재 여부에 따라 작업을 수행해야하는 상황에 처할 수 있습니다.

Bash에서 test 명령을 사용하여 파일이 있는지 확인하고 파일 유형을 확인할 수 있습니다. 

테스트 명령은 다음 구문 형식 중 하나를 사용합니다.

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

 

 

스크립트를 이식 가능하게하려면 모든 POSIX 셸에서 사용할 수있는 이전 test [명령을 사용하는 것이 좋습니다. 새로운 업그레이드 버전의 테스트 명령 [[(이중 대괄호)] Bash, Zsh Ksh를 기본 셸로 사용하는 대부분의 최신 시스템에서 지원됩니다.

 

 

Linux : Bash로 파일, 디렉토리인지 확인하는 방법, 예제, 명령어

 

 

파일이 있는지 확인

파일이 있는지 확인할 때 가장 일반적으로 사용되는 FILE 연산자는 -e -f입니다. 첫 번째 파일은 유형에 관계없이 파일이 있는지 확인하고 두 번째 파일은 FILE이 일반 파일 (디렉토리 또는 장치가 아님) 인 경우에만 true를 반환합니다.

파일의 존재 여부를 확인할 때 가장 읽기 쉬운 옵션은 if 문과 함께 test 명령을 사용하는 것입니다. 아래의 스 니펫은 /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
Copy

 

 

파일이 있는지 여부에 따라 다른 작업을 수행하려면 if / then 구문을 사용하면됩니다.

FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exists."
else 
    echo "$FILE does not exist."
fi

 

 

이름에 공백이 포함 된 파일을 다룰 때 문제를 방지하려면 항상 큰 따옴표를 사용하십시오.

if 문없이 test 명령을 사용할 수도 있습니다. && 연산자 뒤의 명령은 테스트 명령의 종료 상태가 참인 경우에만 실행됩니다.

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."

 

 

 

디렉터리가 있는지 확인

-d 연산자를 사용하면 파일이 디렉토리인지 여부를 테스트 할 수 있습니다.

예를 들어 / etc / docker 디렉토리가 있는지 확인하려면 다음을 사용합니다.

FILE=/etc/docker
if [ -d "$FILE" ]; then
    echo "$FILE is a directory."
fi

== or ==

[ -d /etc/docker ] && echo "$FILE is a directory."

 

 

 

파일이 존재하지 않는지 확인

다른 많은 언어와 마찬가지로 테스트 표현식은!를 사용하여 부정 할 수 있습니다.

FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE does not exist."
fi

-- or --

[ ! -f /etc/docker ] && echo "$FILE does not exist."

 

 

 

여러 파일이 있는지 확인

복잡한 중첩 if / else 구문을 사용하는 대신 -a (또는 [[)와 함께 &&를 사용하여 여러 파일이 존재하는지 테스트 할 수 있습니다.

if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then
    echo "Both files exist."
fi

-- or --

if [[ -f /etc/resolv.conf && -f /etc/hosts ]]; then
    echo "Both files exist."
fi

-- or --

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "Both files exist."

-- or --

[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "Both files exist."

 

 

 

파일 테스트 연산자

test 명령에는 특정 유형의 파일을 테스트 할 수있는 다음 FILE 연산자가 포함되어 있습니다.

-b FILE - FILE이 존재하고 특수 블록 파일이면 참.

-c FILE - FILE이 존재하고 특수 문자 파일이면 참.

-d FILE - FILE이 존재하고 디렉토리이면 참.

-e FILE - FILE이 존재하고 유형 (노드, 디렉토리, 소켓 등)에 관계없이 파일이면 참.

-f FILE - FILE이 존재하고 일반 파일 (디렉토리 나 장치가 아님)이면 참.

-G FILE - FILE이 있고 명령을 실행하는 사용자와 동일한 그룹이있는 경우 참입니다.

-h FILE - FILE이 존재하고 기호 링크 인 경우 참.

-g FILE - FILE이 존재하고 set-group-id (sgid) 플래그가 설정된 경우 참.

-k FILE - FILE이 존재하고 고정 비트 플래그가 설정되어 있으면 참.

-L FILE - FILE이 존재하고 기호 링크 인 경우 참.

-O FILE - FILE이 존재하고 명령을 실행하는 사용자가 소유하는 경우 참입니다.

-p FILE - FILE이 존재하고 파이프이면 참.

-r FILE - FILE이 존재하고 읽을 수 있으면 참.

-S FILE - FILE이 존재하고 소켓이면 참.

-s FILE - FILE이 존재하고 크기가 0이 아닌 경우 참.

-u FILE - FILE이 존재하고 set-user-id (suid) 플래그가 설정된 경우 참.

-w FILE - FILE이 존재하고 쓰기 가능한 경우 참.

-x FILE - FILE이 존재하고 실행 가능한 경우 참.

반응형