我有一个叫diff。txt的文件。我想看看它是不是空的。

我写了一个bash脚本,类似于下面,但我不能让它工作。

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

我非常喜欢shell脚本,但它的一个缺点是,当你拼写错误时,shell不能帮助你,而像c++编译器这样的编译器可以帮助你。

顺便注意一下,我交换了empty.txt和full.txt的角色,就像@Matthias建议的那样。

其他回答

类似于@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

拼写错误很烦人,不是吗?检查一下empty的拼写,然后试试这个:

#!/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

我非常喜欢shell脚本,但它的一个缺点是,当你拼写错误时,shell不能帮助你,而像c++编译器这样的编译器可以帮助你。

顺便注意一下,我交换了empty.txt和full.txt的角色,就像@Matthias建议的那样。

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

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

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"

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