Command line 删除空(零字节)文件

Command line 删除空(零字节)文件,command-line,file,batch-file,Command Line,File,Batch File,仅使用Mac OS X自带的工具查找和删除空(零字节)文件的最简单/最佳方法是什么 find /path/to/stuff -empty 如果这是您要查找的文件列表,请执行以下命令: find /path/to/stuff -empty -exec rm {} \; 小心!没有任何方法可以撤销这个 很简单: find . -type f -size 0 -exec rm -f '{}' + 要忽略任何包含xattr内容的文件(假设MacOSfind实现): 尽管如此,请注意许多Xattr

仅使用Mac OS X自带的工具查找和删除空(零字节)文件的最简单/最佳方法是什么

find /path/to/stuff -empty
如果这是您要查找的文件列表,请执行以下命令:

find /path/to/stuff -empty -exec rm {} \;
小心!没有任何方法可以撤销这个

很简单:

find . -type f -size 0 -exec rm -f '{}' +

要忽略任何包含xattr内容的文件(假设MacOS
find
实现):

尽管如此,请注意许多Xattr并不是特别有用(例如,
com.apple.quantial
存在于所有下载的文件中)。

使用:

find . -type f -size 0b -exec rm {} ';'

使用所有其他可能的变体来限制删除的内容。

您可以通过以下方式降低可能要运行的大量fork/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

使用+优于;如果你有一个最新的发现——它的行为方式就像xargs在管道中一样。请澄清!一个文件是空的,所有的文件都是空的?你试过什么,错误在哪里?对我的回答的评论澄清了这个问题;适当更新。谢谢查尔斯·达菲。抱歉我的英语不好:这确实提高了可移植性,当然——但是
find-exec。。。{}+
仅在Linux之外可用。立即,Solaris 11和OS X都支持最近添加到POSIX find规范中(在1003.1的第6期中添加)。“+”语法的可移植性较差,但仍然具有相当的可移植性。它在许多旧Unixen上绝对不可用,这些旧Unixen具有
xargs
xargs
也比
+
灵活得多,尽管需要额外灵活性的频率非常低。不过,我将添加
+
表单。@AlexNorth Keys,…但是那些旧的UNIX系统是否有
xargs-0
,或者
find-print0
?如果没有,您将面临安全性/正确性问题。@CharlesDuffy Unix第七版和第八版显然没有-print0(或xargs)。1988年,SunOS也没有-print0,但有xargs。因此,旧的Unix系统将不会有它们,这是正确的。IRIS 6.5的发现(1)自1998年起,无打印0。但是,GNU find在1990年11月添加了-print0,因此如果find的GNU版本是在本地编译的,那么“十年”仍然是准确的。注意:这将删除
.textClipping
和其他仅在扩展属性中包含数据的文件类型。请参见“尝试删除0字节文件-休息室-TrueOS”下的示例Community@GrahamPerrin事实上,对于那些使用目前关于这个问题的答案的人来说,这是一个值得注意的问题。你可以考虑添加自己的文件,它避免删除非空xTAFS文件吗?@格雷厄佩林,……我希望它们遵守POSIX,并且因为POSIX XTAFS的大小不在“代码> Stand()/<代码>返回的文件大小中计算,我希望这些工具能够继续反映只要标准需要它们。”GrahamPerrin(顺便说一句,如果您可以从
find
中提取关于xattrs的信息,我强烈建议您这样做:
ls
的输出;每行开头的一些输出都有很好的指定,但这不会延伸到时间戳,更不用说名称了).无论如何--一旦你有了一个建议,请随时注意我的评论(希望还有关于健壮性改进的建议)。这是我们需要特别小心的情况之一--如果有人能让你通过
d=$'/tmp/\n/etc/passwd\n/'mkdir-p--“$d”&&touch删除
/etc/passwd
“$d/empty.txt”
——许多脚本依赖换行符来划分文件名共享的一类错误——这将是一个相当不幸的错误。
find . -empty -delete