如何在目录甚至子目录中找到所有零字节文件?
我这样做了:
#!/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}'
工作目录的零字节文件。