如何删除零字节文件

Rpj*_*Rpj 1 unix linux

我有以下目录结构: -

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
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ler 13

假设您有一个find与POSIX 2008足够兼容的版本来支持该+表示法:

find foo -size 0 -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)

如果不这样做,可以使用以下变体:

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
Run Code Online (Sandbox Code Playgroud)

并且重复问题的接受答案表明-delete,当find你正在使用它时,它是好的(因为它避免了rm通过在unlink()里面进行调用来执行命令的开销find):

find foo -size 0 -delete                    # Not POSIX standard
Run Code Online (Sandbox Code Playgroud)