如何删除零字节文件

我有以下的目录结构:

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下的一些文件是零字节)。 我如何查找和删除这些文件?

假设你有一个足够符合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方法支持时,它是好的(因为它避免了在find unlink()执行unlink()调用来执行rm命令的开销):

 find foo -size 0 -delete # Not POSIX standard