Linux 删除大小为 0 的文件[重复]

问题描述 投票:0回答:8

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

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

有这样的事吗?

linux filesystems delete-file ls rm
8个回答
334
投票

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

find {directory_location} -size 0 -print -delete

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

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

274
投票

你会想使用find

 find . -size 0 -delete

151
投票

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

find . -type f -empty -delete

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


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

find -type f -empty -delete

来自 GNU

find
文档

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


18
投票

您可以使用命令

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

find . -type f -size 0 -delete

5
投票

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

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

这里的 stat 命令只允许我们获取文件大小,即

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


5
投票

这适用于纯 BSD,因此它应该与所有风格普遍兼容。下面,例如在

pwd
(
.
)

find . -size 0 |  xargs rm

1
投票

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

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

1
投票
find . -type f -empty -exec rm -f {} \;
© www.soinside.com 2019 - 2024. All rights reserved.