205

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

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

像这样的东西?

4

8 回答 8

298

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

find /tmp -size 0 -print -delete

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

if [ ! -s /tmp/foo ] ; then
  rm /tmp/foo
fi
于 2011-03-29T16:41:24.113 回答
269

你会想使用find

 find . -size 0 -delete
于 2011-03-29T16:44:12.607 回答
140

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

find . -type f -empty -delete

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


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

find -type f -empty -delete

来自GNUfind文档

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

于 2013-08-05T07:24:07.257 回答
17

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

find . -type f -size 0 -delete
于 2016-02-28T13:03:46.683 回答
5

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

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

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

于 2011-05-13T09:35:22.030 回答
5

这适用于普通的 BSD,因此它应该与所有风格普遍兼容。下面.eg in pwd( .)

find . -size 0 |  xargs rm
于 2016-02-18T19:31:01.380 回答
1

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

rm `du * | awk '$1 == "0" {print $2}'`
于 2014-09-02T18:27:54.413 回答
0
find . -type f -empty -exec rm -f {} \;
于 2015-06-28T09:49:36.810 回答