Unix验证文件没有内容和空行

时间:2013-07-31 20:29:28

标签: bash shell unix awk cut

如何验证文件绝对没有内容。 [-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

3 个答案:

答案 0 :(得分:2)

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

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

玩得开心!

答案 1 :(得分:2)

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

尝试此检查:

[[ $(tr -d "\r\n" < file|wc -c) -eq 0 ]] && echo "File has no content"

答案 2 :(得分:0)

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

对于单个文件,使用bash内置-s的方法(适用于test[[[)。 ([[处理!不那么可怕,但是特定于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默认打印匹配文件。