3

如何验证文件绝对没有内容。[ -s $file ] 给出文件是否为零字节,但如何知道文件是否绝对为空且没有包含空行的数据?

$cat sample.text

$ ls -lrt sample.text
-rw-r--r-- 1 testuser userstest 1 Jul 31 16:38 sample.text

When i "vi" the file the bottom has this - "sample.text" 1L, 1C

4

3 回答 3

3

您的文件可能只有换行符。

试试这个检查:

[[ $(tr -d "\r\n" < file|wc -c) -eq 0 ]] && echo "File has no content"
于 2013-08-01T11:02:39.063 回答
2

根据定义,大小为 0 的文件中没有任何内容,所以你很高兴。但是,您可能想要使用:

if [ \! -s f ]; then echo "0 Sized and completely empty"; fi

玩得开心!

于 2013-07-31T20:31:22.470 回答
0

空行将数据添加到文件中,因此会增加文件大小,这意味着仅检查文件是否为 0 字节就足够了。

对于单个文件,使用 bash 内置的方法(-sfortest或)。(使处理不那么可怕,但特定于 bash)[[[[[!

fn="file"
if [[ -f "$fn" && ! -s "$fn" ]]; then # -f is needed since -s will return false on missing files as well
    echo "File '$fn' is empty"
fi

一种(更多)POSIX shell 兼容方式:(感叹号的转义可以依赖于 shell)

fn="file"
if test -f "$fn" && test \! -s "$fn"; then
    echo "File '$fn' is empty"
fi

对于多个文件,find 是一种更好的方法。

对于单个文件,您可以执行以下操作:(如果为空,它将打印文件名)

find "$PWD" -maxdepth 1 -type f -name 'file' -size 0 -print

对于多个文件,匹配 glob glob*:(如果为空,它将打印文件名)

find "$PWD" -maxdepth 1 -type f -name 'glob*' -size 0 -print

允许子目录:

find "$PWD" -type f -name 'glob*' -size 0 -print

有些find实现不需要将目录作为第一个参数(有些实现,比如 Solaris)。在大多数实现中,该-print参数可以省略,如果未指定,则find默认打印匹配文件。

于 2018-05-15T14:27:48.787 回答