【问题标题】:How to remove zero byte files [closed]如何删除零字节文件[关闭]
【发布时间】:2013-04-07 06:46:20
【问题描述】:

我的目录结构如下:-

foo/dir1/
foo/dir2/
foo/dir3/
foo/dir1/a.rb
foo/dir1/b.rb
foo/dir1/c.rb
foo/dir1/d.rb
foo/dir2/e.rb
foo/dir2/f.rb
foo/dir2/g.rb
foo/dir2/h.rb

如何从某个文件夹中删除零字节文件(dir1,dir2下的一些文件是零字节)。如何查找和删除此类文件?

【问题讨论】:

  • du 可能会帮助您指出正确的方向。
  • 这是问题Remove all the files of zero size in specified directory 的完全重复,但另一个是封闭的“离题”(我不同意;shell 编程就是编程!),所以我不确定将其作为该问题的副本是否是个好主意。
  • (另外,我认为这里的答案比可能重复的答案要好——我认为这是一个客观的评估,但我显然对这个主题并不完全中立。)

标签: linux unix


【解决方案1】:

假设您的 find 版本足够符合 POSIX 2008 以支持 + 表示法:

find foo -size 0 -exec rm -f {} +

如果你不这样做,你可以使用一些变体:

find foo -size 0 -print0 | xargs -0 rm -f   # But you probably have + anyway
find foo -size 0 -exec rm -f {} \;          # Slow but reliable
find foo -size 0 -print | xargs rm -f       # Fails with spaces etc in file names

重复问题的公认答案建议-delete,当您正在使用的find 支持它时,这很好(因为它通过执行unlink() 避免了执行rm 命令的开销内部调用find):

find foo -size 0 -delete                    # Not POSIX standard

【讨论】:

  • 我认为-0 的东西比+ 旧,所以可能有支持-0 但不支持+ 的工具组合。
  • @glglgl:你是对的 - 可能仍然有真正的旧平台使用 -print0-0 而不是 +,所以我将修改答案以使其不那么明确评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多