linux如何把文件大小改为0,关于文件系统:Linux删除大小为0的文件

本问题已经有最佳答案,请猛点这里访问。

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

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

像这样的东西?

你想要使用find:

find . -size 0 -delete

我会添加"-type f",因??为目录也标记为大小为零。"点"是可选的。

"dot"对于Linux是可选的,但对于Mac OS不是可选的

@JakubM。谢谢,我相应地编辑了我的答案。

有一个-empty选项:-)

@lilydjwg确切地说,如果我们被允许使用非POSIX标志,find . -empty -delete是最酷的。 :-)

您可以为当前文件夹添加-maxdepth 1。

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

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

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

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

rm /tmp/foo

fi

快捷方式:[ -s /tmp/foo ] || rm /tmp/foo(测试大小是否为零,否则删除)。另请注意,如果文件/目录名称包含空格,则xargs是不安全的;在这种情况下,find ... -exec rm '{}' \;是安全的。

@Frank,你对xargs不正确。 '-print0`和xargs -0校正空格。

@FrankH:另外,即使使用find -exec,在你可以的情况下总是支持+而不是;(这就是这种情况)。

rm --(注意尾随的--字符)是否比rm更安全,以防止流氓文件名? serverfault.com/questions/337082/

是否还有一个运行空运行的命令,以查看哪些文件将被删除?

@SimonBaars find /tmp -size 0 -print0 |xargs -0 echo rm

为什么不简单-delete?

@Ruslan因为-delete是新的,我的版本适用于过去40年生产的每个find版本。

-print0真的已经40岁了,无处不在吗?

@Rusian很确定它是在BSD 4.3中,虽然显然它没有像早期的AIX那样进入严格的SysV Unices。

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

find . -type f -empty -delete

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

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

find -type f -empty -delete

从GNU find文档:

If no files to search are specified, the current directory (.) is used.

很优雅的解决方案

我会添加-name'* .SomeFileExtension'例如:如果你只想删除文本文件,那么我会使用:find . -name '*.txt' -type f -empty -delete

@jspek,嗯,这取决于你是否具有特定的用途......通常当你在空文件之后,你就要杀掉它们。 :)

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

find . -type f -size 0 -delete

找 。 -maxdepth 1-type f -size 0 -delete这将查找当前目录中的empthy文件,而不进入子目录。

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

find . -size 0 |  xargs rm

BSD不支持-delete选项吗? freebsd.org/cgi/man.cgi?find(1)

@Antonio OpenBSD 6.0至少没有。

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

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

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

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

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

-bash:/ usr / bin / du:参数列表太长

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

你可以使用-delete标志 - 保存一个exec。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值