如何在 Bash 中检查文件是否为空?

2024-10-23 08:47:00
admin
原创
70
摘要:问题描述:我有一个名为diff.txt的文件。我想检查它是否为空。我编写了类似下面的 bash 脚本,但无法使其工作。if [ -s diff.txt ] then touch empty.txt rm full.txt else touch full.txt ...

问题描述:

我有一个名为diff.txt的文件。我想检查它是否为空。

我编写了类似下面的 bash 脚本,但无法使其工作。

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

解决方案 1:

试试这个:

#!/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,正如@Matthias所建议的那样。

解决方案 2:

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

解决方案 3:

[ -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

解决方案 4:

要检查文件是否为空或者仅包含空格,可以使用 grep:

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

解决方案 5:

虽然其他答案都是正确的,但使用该"-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

解决方案 6:

检查文件是否为空的最简单方法:

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"

解决方案 7:

@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

解决方案 8:

[[ -f filename && ! -s filename ]] && echo "filename exists and is empty"

解决方案 9:

许多答案都是正确的,但我觉得它们可以更完整/更简单等。例如:

示例 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
}

解决方案 10:

与@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

解决方案 11:

我来这里寻找如何删除空__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

此外(至少在 zsh 中)使用 $path 作为变量也会破坏您的 $PATH 环境,因此它会破坏您打开的 shell。无论如何,我想分享一下!

解决方案 12:

  1. (对于上面的人)我不确定你是否真的想在[[程序中使用逻辑运算符。也许你应该使用[[ expr_1 ]] && [[ expr_2 ]]而不是[[ expr_1 && expr_2 ]]

  2. 该表达式[[ -s file.txt ]]还检查文件是否存在,因此我认为-f在此之前没有任何理由使用它。

这是一个简单的语句,用于检查文件是否存在、是否为空且包含 0:

if [[ ! -s ./example.txt  ]] || grep -q 0 "./example.txt"; then
  echo "example.txt doesn't exist, is empty or contains 0"
else
  echo "example.txt contains 1"

最后说明一下:请注意,空文件并不总是空的:

  • touch example.txt- 该文件是空的

  • echo "" > example.txt- 此文件不为空

解决方案 13:

我的回答对于使用“虚拟”文件系统(如)有些具体sysfs。如果您使用此处大多数答案中提到的方法,此类文件系统可能会产生错误的结果。因为文件可以被stat视为具有非零长度,但如果您尝试读取其内容,您将什么也得不到(或 I/O 错误)。

cat -n 1 '/path/to/file' &> /dev/null && echo true || echo false

稍微解释一下。这里我们尝试从文件中读取第一行并默默忽略其内容(将其发送到/dev/null)。根据退出状态,我们打印“true”或“false”。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用