Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

Bash에서 파일 또는 디렉토리 존재 여부 확인하는 방법 [+ 예제]

리눅스 시스템에서는 bash의 test 명령어를 사용해 파일이나 디렉토리의 존재 여부를 간단히 확인할 수 있습니다. 아래 예제를 통해 실제 사용 방법을 자세히 살펴보겠습니다.

test 명령어 기본 문법

test EXPRESSION

test 명령어는 EXPRESSION(표현식)을 평가하고 그 결과를 반환합니다. 표현식은 아래 표의 연산자들을 단독으로 또는 조합하여 작성할 수 있습니다.

연산자 설명 및 예제
-d file 파일이 디렉토리(Directory)이면 참. [[ -d demofile ]]
-e file 파일이 존재(Exists)하면 참. [[ -e demofile ]]
-f file 파일이 일반 파일(Regular File)이면 참. [[ -f demofile ]]
-h file 파일이 심볼릭 링크(Symbolic Link)이면 참. [[ -h demofile ]]
-L file 파일이 심볼릭 링크(Symbolic Link)이면 참. [[ -L demofile ]]
-s file 파일 크기(Size)가 0보다 크면 참. [[ -s demofile ]]

test 명령어는 파일의 날짜, 유형, 권한 비교는 물론 문자열이나 숫자 비교 등 다양한 용도로 활용할 수 있습니다. 전체 사용법이 궁금하다면 리눅스 셸에서 아래 명령어로 매뉴얼을 확인해 보세요.

man test

예제 코드에서 대괄호 [[]]를 보셨을 텐데요. 사실 대괄호는 test 명령어의 축약형으로, test 대신 바로 사용할 수 있습니다. 다만 이 글에서는 내용을 쉽게 이해할 수 있도록 test 명령어를 그대로 사용하겠습니다.

test 명령어 실전 예제

리눅스 셸에서 && 연산자를 사용하면 파일이나 디렉토리의 존재 여부를 빠르게 확인할 수 있습니다. && 뒤에 오는 명령어는 앞의 test 명령어가 TRUE 상태로 종료되었을 때만 실행됩니다.

test -e /path/to/myfile && echo "파일 또는 디렉토리가 존재합니다."

if 문과 함께 test 명령어 사용하기

if..else 문과 test 명령어를 조합하면 조건 분기 로직이 포함된 스크립트를 만들 수 있습니다.

if test -f path/to/myfile; then
    echo "파일이 존재하며 일반 파일입니다."
elif test -d path/to/myfile; then
    echo "파일이 존재하며 디렉토리입니다."
else 
    echo "파일이 존재하지 않습니다."
fi

마무리

사용자의 파일 시스템을 다룰 때는 기존에 어떤 파일이 있는지 확인하지 않고 곧바로 수정하거나 생성하는 것은 결코 좋은 습관이 아닙니다. 소중한 데이터를 덮어써서 손실을 입거나 심각한 문제에 부딪힐 수 있기 때문입니다.

잘 설계된 스크립트는 항상 먼저 파일의 존재 여부를 확인하고, 사용자에게 어떤 조치를 취할지 물어본 뒤 작업을 진행합니다. 위에서 소개한 방법을 응용하면 이런 안전장치를 손쉽게 구현할 수 있습니다.

리눅스 셸 활용에 관한 더 많은 튜토리얼이 필요하다면 여기를 클릭하세요!