仅使用 Mac OS X 原生工具查找和删除空(零字节)文件的最简单/最佳方法是什么?
很简单:
find . -type f -size 0 -exec rm -f '{}' +
忽略任何具有 xattr 内容的文件(假设 MacOS
find
实现):
find . -type f -size 0 '!' -xattr -exec rm -f '{}' +
也就是说,请注意,许多 xattr 并不是特别有用(例如,
com.apple.quarantine
存在于所有下载的文件中)。
您可以通过以下方式减少运行 /bin/rm 时潜在的大量分叉:
find . -type f -size 0 -print0 | xargs -0 /bin/rm -f
上面的命令非常可移植,可以在大多数版本的 Unix 上运行,而不仅仅是 Linux 机器,并且可以在几十年前的 Unix 版本上运行。 对于长文件列表,可以执行多个
/bin/rm
命令以防止列表超出命令行长度限制。
在较新的操作系统上,通过更少的输入也可以实现类似的效果,使用
+
中的 find
来替换 xargs
的最常见用法,其风格仍然适合除 /bin/rm
之外的其他操作。 在这种情况下,find
将处理将真正长的文件列表拆分为单独的/bin/rm
命令。 {}
通常被引用以防止 shell 对它做任何事情;引号并不总是必需的,但 shell 引用的复杂性太复杂,无法在此处介绍,因此当有疑问时,请包含撇号:
find . -type f -size 0 -exec /bin/rm -f '{}' +
在 Linux 中,通常可以使用
-delete
提供更简短的方法。请注意,最近 find
的 -delete
主要是直接使用 unlink
(2) 实现的,并且不会产生无数 /bin/rm
命令,甚至不会产生 xargs
和 +
那样的少数命令。 Mac OS find
还具有 -delete
和 -empty
原色。
find . -type f -empty -delete
要删除空(和新清空的)文件 - 目录 - 许多现代 Linux 主机可以使用这种有效的方法:
find . -empty -delete
find /path/to/stuff -empty
如果这是您要查找的文件列表,请输入命令:
find /path/to/stuff -empty -exec rm {} \;
小心!没有任何办法可以撤销此操作!
用途:
find . -type f -size 0b -exec rm {} ';'
使用所有其他可能的变体来限制删除的内容。
如果您想在一个特定文件夹中执行此操作,这是一个非常简单的解决方案: