【问题标题】:Unix to verify file has no content and empty linesUnix验证文件没有内容和空行
【发布时间】:2013-08-01 13:36:02
【问题描述】:

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

【问题讨论】:

  • 你能举个例子,一个0字节的文件,但里面有内容(包括空行)吗?
  • 删除空行并执行您尝试的操作。或者,找到字符数 --wc -c?
  • 啊!所以它是 0 个字节 并且 没有空行。甜!
  • 0 字节大小的文件不可能包含空行。一个空行只包含一个字符:换行符。因此,包含至少一个空行的文件的大小必须至少为 1 个字节。这就是@Kent 所暗示的。

标签: bash shell unix awk cut


【解决方案1】:

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

试试这个检查:

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

【讨论】:

    【解决方案2】:

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

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

    玩得开心!

    【讨论】:

    • 你的意思是f 作为文件名吗?顺便说一句,它对我不起作用。
    【解决方案3】:

    空行将数据添加到文件中,因此会增加文件大小,这意味着仅检查文件是否为 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 默认打印匹配文件。

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 2011-06-19
      • 2016-09-29
      • 2018-05-16
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      相关资源
      最近更新 更多