如何查找目录中的所有零字节文件

如何查找目录中的所有零字节文件

如何在目录甚至子目录中找到所有零字节文件?

我这样做了:

#!/bin/bash
lns=`vdir -R *.* $dir| awk '{print $8"\t"$5}'`
temp=""
for file in $lns ; do
    if test $file = "0" ;then
        printf $temp"\t"$file"\n"
    fi
    temp=$file
done

...但我只得到了该目录中的文件,而不是所有文件,并且如果任何文件名中有空格,我只得到了第一个单词后跟一个制表符。

谁能帮我?

答案1

find有一个简单的方法可以做到这一点-:

find . -size 0

或者如果您需要长列表,请附加-ls选项

find . -size 0 -ls

答案2

find将包含作为参数给出的路径下的所有文件和目录,并根据作为附加参数给出的规则对其进行过滤。您可以使用

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

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

  • "$dir"被 shell 用dir变量的值替换(如问题所示)
  • -type f将其限制为文件(无目录或符号链接)
  • -name 'glob*'将其限制为名称匹配的文件glob*(文件名以 开头glob)。要包含所有文件,请省略此
  • -size 0仅包含大小为 0 的文件(所有单位相同,对于非零值,c需要包含在内以检查文件大小(以字节为单位))
  • -print是针对匹配文件执行的操作。-print将打印文件名。在符合标准的实现中可以省略它find。如果不存在则-print暗示。

答案3

你可以尝试这个:

ls -l | awk -F " " '{if ($5 == 0) print $9}'

工作目录的零字节文件。

相关内容