[bash] Bash에서 파일이 비어 있는지 확인하는 방법은 무엇입니까?

diff.txt라는 파일이 있습니다. 비어 있는지 확인하고 싶습니다. 이와 같은 것을했지만 작동시키지 못했습니다.

if [ -s diff.txt ]
then
        touch empty.txt
        rm full.txt
else
        touch full.txt
        rm emtpy.txt
fi



답변

맞춤법 오류가 자극적입니까? 의 철자를 확인하고 empty다음을 시도하십시오.

#!/bin/bash -e

if [ -s diff.txt ]
then
        rm -f empty.txt
        touch full.txt
else
        rm -f full.txt
        touch empty.txt
fi

나는 쉘 스크립팅을 많이 좋아하지만, 한 가지 단점은 철자가 틀렸을 때 쉘이 당신을 도울 수 없지만 C ++ 컴파일러와 같은 컴파일러가 당신을 도울 수 있다는 것입니다.

@Matthias가 제안한 것처럼 우연히 empty.txtand 의 역할을 바꿨습니다 full.txt.


답변

[ -s file.name ] || echo "file is empty"


답변

[[-s file]]-> 파일 크기가 0보다 큰지 확인

if [[ -s diff.txt ]]; then echo "file has something"; else echo "file is empty"; fi

필요한 경우 현재 디렉토리의 모든 * .txt 파일을 검사합니다. 빈 파일을 모두보고합니다.

for file in *.txt; do if [[ ! -s $file ]]; then echo $file; fi; done


답변

다른 답변은 정확하지만 "-s"옵션을 사용 하면 파일이 존재하지 않아도 파일이 비어 있음을 나타냅니다.
이 추가 검사 "-f"를 추가 하여 파일이 먼저 존재하는지 확인하여 결과가 올바른지 확인합니다.

if [ -f diff.txt ]
then
  if [ -s diff.txt ]
  then
    rm -f empty.txt
    touch full.txt
  else
    rm -f full.txt
    touch empty.txt
  fi
else
  echo "File diff.txt does not exist"
fi


답변

@geedoubleya 답변은 내가 가장 좋아하는 것입니다.

그러나 나는 이것을 선호한다

if [[ -f diff.txt && -s diff.txt ]]
then
  rm -f empty.txt
  touch full.txt
elif [[ -f diff.txt && ! -s diff.txt ]]
then
  rm -f full.txt
  touch empty.txt
else
  echo "File diff.txt does not exist"
fi


답변

파일이 비어 있거나 공백 만 있는지 확인하려면 grep을 사용할 수 있습니다.

if [[ -z $(grep '[^[:space:]]' $filename) ]] ; then
  echo "Empty file" 
  ...
fi


답변

많은 답변이 정확하지만 예를 들어 더 완벽하고 단순 할 수 있다고 생각합니다.

예 1 : 기본 if 문

# BASH4+ example on Linux :

typeset read_file="/tmp/some-file.txt"
if [ ! -s "${read_file}" ]  || [ ! -f "${read_file}" ] ;then
    echo "Error: file (${read_file}) not found.. "
    exit 7
fi

$ read_file이 비어 있거나 없으면 종료와 함께 쇼를 중지하십시오. 한 번 이상 나는 여기서 정답을 오해하여 그 반대를 의미했습니다.

예 2 : 함수로서

# -- Check if file is missing /or empty --
# Globals: None
# Arguments: file name
# Returns: Bool
# --
is_file_empty_or_missing() {
    [[ ! -f "${1}" || ! -s "${1}" ]] && return 0 || return 1
}