Linux删除大小为0的文件

时间:2011-03-29 16:39:21

标签: linux filesystems delete-file ls rm

如果大小为0,如何在linux中删除某个文件。我想在crontab中执行此操作而不需要任何额外的脚本。

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

这样的东西?

8 个答案:

答案 0 :(得分:237)

您希望使用find

 find . -size 0 -delete

答案 1 :(得分:189)

这将删除大小为零的目录(及以下)中的所有文件。

find /tmp -size  0 -print0 |xargs -0 rm --

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

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

答案 2 :(得分:106)

要搜索和删除当前目录和子目录中的空文件:

find . -type f -empty -delete

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


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

find -type f -empty -delete

来自GNU find documentation

  

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

答案 3 :(得分:14)

您可以使用命令find执行此操作。我们可以将文件与-type f匹配,并使用-size 0匹配空文件。然后,我们可以使用-delete删除匹配项。

find . -type f -size 0 -delete

答案 4 :(得分:4)

这适用于普通BSD,因此它应该与所有口味普遍兼容。在pwd.

下面
find . -size 0 |  xargs rm

答案 5 :(得分:3)

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

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

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

答案 6 :(得分:2)

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

rm `du * | awk '$1 == "0" {print $2}'`

答案 7 :(得分:1)

find . -type f -empty -exec rm -f {} \;