일반 파일이 Bash에 존재하지 않는지 어떻게 알 수 있습니까?


질문

 

파일이 있는지 확인하려면 다음 스크립트를 사용했습니다.

#!/bin/bash

FILE=$1     
if [ -f $FILE ]; then
   echo "File $FILE exists."
else
   echo "File $FILE does not exist."
fi

파일이 존재하지 않는지 확인하려는 경우 사용할 올바른 구문은 무엇입니까?

#!/bin/bash

FILE=$1     
if [ $FILE does not exist ]; then
   echo "File $FILE does not exist."
fi

답변

 

테스트 명령 ([여기)에는 느낌표 (다른 많은 언어와 유사) 인 "아닌"논리 연산자가 있습니다.이 시도:

if [ ! -f /tmp/foo.txt ]; then
    echo "File not found!"
fi


답변

Bash 파일 테스트

-b 파일 이름 - 특수 파일을 차단합니다 -c filename - 특수 문자 파일 -d directoryName - 디렉토리 존재를 확인하십시오 -e filename - 유형 (노드, 디렉토리, 소켓 등)에 관계없이 파일 존재 여부를 확인하십시오. -f filename - 디렉토리가 아닌 일반 파일 존재 여부 확인 -g Filename - 파일이 있고 효과적인 그룹 ID가 소유한지 확인하십시오. -g filename set-group-id - 파일이 존재하고 set-group-id 인 경우 true -k 파일 이름 - 끈적 거리는 비트 -l filename - 기호 링크 -o filename - 파일이 있고 유효 사용자 ID가 소유 한 경우 true -r 파일 이름 - 파일이 읽을 수 있는지 확인하십시오 -s filename - 파일이 소켓인지 확인하십시오 -s filename - 파일이 0이 아닌 경우 확인하십시오 -u filename - 파일 세트 - 사용자 ID 비트가 설정되어 있는지 확인하십시오. -w filename - 파일이 쓸 수 있는지 확인하십시오 -x filename - 파일이 실행 파일인지 확인하십시오

사용하는 방법:

#!/bin/bash
file=./file
if [ -e "$file" ]; then
    echo "File exists"
else 
    echo "File does not exist"
fi 

테스트 표현은!를 사용하여 무효화 할 수 있습니다.운영자

#!/bin/bash
file=./file
if [ ! -e "$file" ]; then
    echo "File does not exist"
else 
    echo "File exists"
fi 


답변

테스트 내에서 표현식을 무효화 할 수 있습니다 ([별칭은 "!"로 사용됩니다.

#!/bin/bash
FILE=$1

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

관련 맨 페이지는 사람 테스트 또는 동등한 사람 [또는 도움말 테스트 또는 도움말 [내장 Bash 명령의 경우 도움말이 있습니다.

또는 (덜 일반적으로 사용됨) 다음을 사용하여 테스트 결과를 무효화 할 수 있습니다.

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

이 구문은 "파이프 라인"및 "복합 명령"섹션에서 "Man 1 Bash"에 설명되어 있습니다.



답변

[[ -f $FILE ]] || printf '%s does not exist!\n' "$FILE"

또한 파일이 깨진 심볼릭 링크 또는 예를 들어 일반 파일 인 경우가 있습니다.소켓, 장치 또는 FIFO.예를 들어, 깨진 심볼 링크에 대한 수표를 추가하려면 다음을 수행하십시오.

if [[ ! -f $FILE ]]; then
    if [[ -L $FILE ]]; then
        printf '%s is a broken symlink!\n' "$FILE"
    else
        printf '%s does not exist!\n' "$FILE"
    fi
fi


답변

단일 명령을 실행 해야하는 경우에는 약칭 할 수있는 단일 명령을 수행 해야하는 것은 언급 할 가치가 있습니다.

if [ ! -f "$file" ]; then
    echo "$file"
fi

에게

test -f "$file" || echo "$file"

또는

[ -f "$file" ] || echo "$file"


답변

POSIX 셸 호환 형식으로 다음 한 라이너를하는 것을 선호합니다.

$ [ -f "/$DIR/$FILE" ] || echo "$FILE NOT FOUND"

$ [ -f "/$DIR/$FILE" ] && echo "$FILE FOUND"

스크립트에서 할 수있는 것처럼 몇 가지 명령의 경우 :

$  [ -f "/$DIR/$FILE" ] || { echo "$FILE NOT FOUND" ; exit 1 ;}

일단 내가 이것을하기 시작하면 나는 완전히 입력 된 구문을 더 이상 사용하지 않는다 !!

출처:https://stackoverflow.com/questions/638975/how-do-i-tell-if-a-regular-file-does-not-exist-in-bash