Linux删除大小为0的文件

linux下,如果文件大小为0,如何删除。我想在没有任何额外脚本的crontab中执行这个。

l filename.file | grep 5th-tab | not eq 0 | rm

像这样的东西?

221631 次浏览

这将删除一个目录(或以下目录)中大小为0的所有文件。

find /tmp -size 0 -print -delete

如果你只想要一个特定的文件;

if [ ! -s /tmp/foo ] ; then
rm /tmp/foo
fi

你会想要使用< >强找到< / >强:

 find . -size 0 -delete

在Linux上,当你不需要find(1)时,stat(1)命令很有用:

(( $(stat -c %s "$filename") )) || rm "$filename"

这里的stat命令只允许我们获取文件大小,即-c %s(其他格式请参阅手册页)。我正在运行stat程序并捕获它的输出,这是$( )。此输出以数字形式显示,这是外部(( ))。如果size为0,则为FALSE,因此执行OR的第二部分。非零(非空文件)将为TRUE,因此rm将不会被执行。

搜索并删除当前目录及其子目录下的空文件。

find . -type f -empty -delete

-type f是必要的,因为目录也被标记为大小为0。


.(当前目录)是开始搜索目录。如果你有GNU find(例如不是Mac OS),在这种情况下你可以省略它:

find -type f -empty -delete

GNU find文档:

如果没有指定要搜索的文件,则使用当前目录(.)。

对于非递归删除(使用du和awk):

rm `du * | awk '$1 == "0" {print $2}'`
find . -type f -empty -exec rm -f {} \;

这适用于普通BSD,因此它应该与所有口味普遍兼容。下面。e.g. in pwd (.)

find . -size 0 |  xargs rm

你可以使用命令find来做到这一点。我们可以用-type f来匹配文件,用-size 0来匹配空文件。然后我们可以删除与-delete的匹配项。

find . -type f -size 0 -delete