티스토리 뷰

728x90

Bash shell script에서 어떤 경로의 파일이 실제로 존재하는지 체크하는 방법에 대해서 알아보겠습니다.

 

텍스트 파일 등을 읽을 때, 먼저 특정 경로에 파일이 존재하는지 확인 후 read를 시도하는데요. if문으로 파일 존재 유무를 체크하는 방법을 소개합니다.

 

'파일/디렉토리' 가 존재 여부 확인

일반 파일과 디렉토리를 구분하지 않고, 해당 경로의 파일이 존재하는지 체크하고 싶을 때는 아래와 같이 -e 비교 연산자를 사용하면 됩니다.

 

아래와 같이 "if [ -e "$File" ]" 는 변수 File의 경로에 일반 파일 또는 디렉토리가 존재하면 true를 리턴합니다.

 

#!/bin/bash

File=/var/tmp/uml.zip

if [ -e "$File" ]; then  
  echo "$File exist "  
fi

실행 결과:

/var/tmp/uml.zip exist 

 

파일이 존재하지 않는 경우를 체크

-e와 if-else를 사용하여 존재하지 않는 경우에 대한 예외처리를 할 수도 있지만, 아래와 같이 !(not)를 붙여서 존재하지 않는 경우를 if문으로 확인할 수 있습니다.

#!/bin/bash

File=/var/tmp/uml1.zip

if [ ! -e "$File" ]; then  
  echo "$File not exist "  
fi

실행 결과:

/var/tmp/uml1.zip not exist

 

디렉토리가 아닌 파일의 존재 여부 확인

-e는 일반 파일뿐만 아니라 디렉토리 구분 없이, 존재하기만 하면 true를 리턴하였습니다.

 

-f는 디렉토리에 대해서는 항상 false를 리턴하며, 일반 파일에 대해서 파일이 존재할 때만 true를 리턴합니다. 즉, 해당 파일이 일반 파일이고, 파일이 존재하는 경우를 확인하고 싶을 때 -f 비교 연산자를 사용할 수 있습니다.

#!/bin/bash

File=/var/tmp/uml.zip

if [ ! -f "$File" ]; then  
  echo "$File not exist "  
fi

실행 결과:

/var/tmp/uml.zip exist 

 

파일이 아닌 디렉토리의 존재 여부 확인

반대로 일반 파일은 관심 없고, 해당 경로의 파일이 디렉토리이고 디렉토리가 존재하는 경우를 확인하고 싶을 때는 -d 연산자를 사용하면 됩니다. 그럼 일반 파일은 파일이 존재해도 false를 리턴하며, 디렉토리가 존재할 때만 true가 리턴됩니다.

#!/bin/bash

File=/var/tmp/tempdir

if [ -d "$File" ]; then  
  echo "$File exist "  
fi

실행 결과:

/var/tmp/tempdir exist

 

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함