programing

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

abcjava 2023. 5. 16. 22:03
반응형

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

저는 diff라는 파일을 가지고 있습니다.txt. 빈지 확인하고 싶습니다.

아래와 같은 bash 스크립트를 작성했지만 작동하지 않았습니다.

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

사용해 보십시오.

#!/bin/bash -e

if [ -s diff.txt ]; then
        # The file is not-empty.
        rm -f empty.txt
        touch full.txt
else
        # The file is empty.
        rm -f full.txt
        touch empty.txt
fi

참고로, 제가 역할을 바꿨다는 것을(를)empty.txt그리고.full.txt@마티아스의 말대로

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

[ -s file ] # Checks if file has size greater than 0

[ -s diff.txt ] && echo "file has something" || echo "file is empty"

필요한 경우 현재 디렉터리에 있는 *.txt 파일을 모두 검사하고 빈 파일을 모두 보고합니다.

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

파일이 비어 있는지 또는 공백만 있는지 확인하려면 grep:

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

다른 답변이 올바르지만 다음을 사용합니다."-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

파일이 비어 있는지 확인하는 가장 쉬운 방법:

if [ -s /path-to-file/filename.txt ]
then
     echo "File is not empty"
else
     echo "File is empty"
fi

한 줄로 작성할 수도 있습니다.

[ -s /path-to-file/filename.txt ] && echo "File is not empty" || echo "File is empty"

@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
[[ -f filename && ! -s filename ]] && echo "filename exists and is empty"

많은 답이 정확하지만 다음과 같은 경우에는 더 완전하거나 단순할 수 있다고 생각합니다.

예 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
}

@noam-manos의 것과 유사합니다.grep-기반 답변, 저는 이것을 사용하여 해결했습니다.cat.나를 위해.-s내 "빈" 파일의 바이트 수가 0바이트를 초과했기 때문에 작동하지 않았습니다.

if [[ ! -z $(cat diff.txt) ]] ; then
    echo "diff.txt is not empty"
else
    echo "diff.txt is empty"
fi

빈칸을 삭제하는 방법을 찾으러 왔습니다.__init__.py파일은 Python 3.3+에서 암시적이며 다음을 사용하게 되었습니다.

find -depth '(' -type f  -name __init__.py ')' -print0 |
  while IFS= read -d '' -r file; do if [[ ! -s $file ]]; then rm $file; fi; done

또한 $path를 변수로 사용하는 것은 (적어도 zsh 단위로) $PATH 환경을 파괴하므로 열려 있는 셸을 파괴합니다.어쨌든, 나는 공유할 줄 알았어요!

언급URL : https://stackoverflow.com/questions/9964823/how-to-check-if-a-file-is-empty-in-bash

반응형