如何删除 Linux 中的某个文件,如果其大小为 0。我想在 crontab 中执行此操作,而不需要任何额外的脚本。
l filename.file | grep 5th-tab | not eq 0 | rm
有这样的事吗?
这将删除目录(及以下)中大小为零的所有文件。
find {directory_location} -size 0 -print -delete
如果您只想要某个特定文件;
if [ ! -s /tmp/foo ] ; then
rm /tmp/foo
fi
你会想使用find:
find . -size 0 -delete
您可以使用命令
find
来执行此操作。我们可以使用 -type f
匹配文件,使用 -size 0
匹配空文件。然后我们可以用 -delete
删除匹配项。
find . -type f -size 0 -delete
在 Linux 上,当您不需要 find(1) 时,stat(1) 命令很有用:
(( $(stat -c %s "$filename") )) || rm "$filename"
这里的 stat 命令只允许我们获取文件大小,即
-c %s
(请参阅其他格式的手册页)。我正在运行 stat 程序并捕获其输出,这就是 $( )
。该输出以数字形式显示,即外部 (( ))
。如果大小为零,则为 FALSE,因此执行 OR 的第二部分。非零(非空文件)将为 TRUE,因此 rm 不会被执行。
这适用于纯 BSD,因此它应该与所有风格普遍兼容。下面,例如在
pwd
( .
) find . -size 0 | xargs rm
对于非递归删除(使用 du 和 awk):
rm `du * | awk '$1 == "0" {print $2}'`
find . -type f -empty -exec rm -f {} \;