logo

파일이 존재하는지 Bash 확인

대부분의 경우 파일이 존재하는지 여부를 확인하는 작업을 수행해야 하는 상황을 찾을 수 있습니다.

Bash에서는 '테스트 명령'을 사용하여 파일이 존재하는지 확인하고 파일 유형을 결정할 수 있습니다.

다음은 테스트 명령의 구문이며 다음 명령 중 하나를 사용할 수 있습니다.

 test expression [ expression ] [[ expression ]] 

모든 POSIX 쉘에 대해 스크립트를 이식 가능하게 만들려면 단일 대괄호 '[' 명령을 사용해야 합니다. 업그레이드된 버전의 test 명령에는 Bash, Zsh 및 Ksh를 기본 셸로 사용하는 대부분의 최신 시스템에서 지원되는 이중 대괄호 '[['가 포함되어 있습니다.

파일이 존재하는지 확인

파일이 존재하는지 확인할 때 가장 일반적으로 사용되는 파일 연산자는 -e 및 -f입니다. '-e' 옵션은 종류에 관계없이 파일이 존재하는지 확인하는 데 사용되며, '-f' 옵션은 파일이 일반 파일(디렉토리나 장치가 아닌)인 경우에만 참값을 반환하는 데 사용된다.

파일이 존재하는지 여부를 확인하는 가장 일반적인 옵션은 'if 조건문'과 함께 test 명령을 사용하는 것입니다.

'read_file.txt' 파일이 존재하는지 확인하는 예는 다음과 같습니다.

방법 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

방법 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

방법 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

산출

디렉터리에 파일(read_file.txt)이 있으므로 세 가지 방법 모두에 대한 출력은 다음과 같습니다.

mysql 사용자 생성
 read_file.txt exist 

파일이 존재하는지 여부에 따라 결과를 제공하는 작업을 수행하려면 다음과 같은 방법으로 if/then 구성을 사용할 수 있습니다.

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

산출

 read_file.txt exist 

if 문 없이 test 명령을 사용할 수도 있습니다. 다음 방법 중 하나를 사용할 수 있습니다.

방법 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

방법 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

방법 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

산출

디렉터리에 파일(read_file.txt)이 있으므로 세 가지 방법 모두에 대한 출력은 다음과 같습니다.

 read_file.txt exist 

&& 연산자 뒤에 실행할 명령이 여러 개 있는 경우 세미콜론(;) 또는 AND(&&)로 구분된 중괄호로 명령을 묶습니다. 즉, 다음과 같습니다.

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

&&와 달리 || 테스트 명령의 종료 상태가 'false'인 경우에만 연산자가 실행됩니다.

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

산출

 read_file.txt exist 

Bash에서 파일이 존재하는지 여부를 확인하기 위해 일반적으로 사용되는 방법입니다.

디렉토리가 존재하는지 확인

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

'Javatpoint' 디렉터리가 존재하는지 확인하는 방법은 다음과 같습니다.

방법 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

방법 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

메모:단일 대괄호 '[' 대신 이중 대괄호 '[['를 사용할 수도 있습니다.

산출

지정된 위치에 디렉토리(Javatpoint라는 이름)가 있으므로 위 두 방법의 출력은 다음과 같습니다.

 Javatpoint is a directory 

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

느낌표(! -논리적 NOT 연산자)를 사용하여 테스트 표현식을 부정할 수 있습니다. 다음 예를 확인하세요.

컬렉션 자바

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

위 스크립트는 아래와 같이 작성할 수도 있습니다.

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

산출

 missing_read_file.txt unavailable 

파일 테스트 연산자

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

-b 파일 반환 FILE이 블록 특수 파일로 존재하면 'True'입니다.
-c 파일 반환 FILE이 특수 문자 파일로 존재하는 경우 'True'입니다.
-d 파일 반환 FILE이 디렉터리로 존재하면 'True'입니다.
-e 파일 반환 유형(노드, 디렉터리, 소켓 등)에 관계없이 FILE이 파일로 존재하는 경우 'True'입니다.
-f 파일 반환 FILE이 일반 파일(디렉토리나 장치가 아님)로 존재하는 경우 'True'입니다.
-G 파일 반환 FILE이 존재하고 사용자가 명령을 실행하는 것과 동일한 그룹을 포함하는 경우 'True'입니다.
-h 파일 반환 FILE이 심볼릭 링크로 존재하면 'True'입니다.
-g 파일 반환 FILE이 존재하고 set-group-id(sgid) 플래그 세트를 포함하는 경우 'True'입니다.
-k 파일 반환 FILE이 존재하고 고정 비트 플래그 세트를 포함하는 경우 'True'입니다.
-L 파일 반환 FILE이 심볼릭 링크로 존재하면 'True'입니다.
-O 파일 반환 FILE이 존재하고 명령을 실행하는 사용자가 소유한 경우 'True'입니다.
-p 파일 반환 FILE이 파이프로 존재하면 'True'입니다.
-r 파일 반환 FILE이 읽기 가능한 파일로 존재하면 'True'입니다.
-S 파일 반환 FILE이 소켓으로 존재하면 'True'입니다.
-s 파일 반환 FILE이 존재하고 크기가 0이 아닌 경우 'True'입니다.
-u 파일 반환 FILE이 존재하고 set-user-id(suid) 플래그가 설정된 경우 'True'입니다.
-w 파일 반환 FILE이 쓰기 가능한 파일로 존재하는 경우 'True'입니다.
-x 파일 반환 FILE이 실행 파일로 존재하는 경우 'True'입니다.