Answers:
这可以通过以下方式完成find
:
find . -type f -size -1M -exec rm {} +
请注意,这将递归地下降到子目录中,并且将无条件删除所有小于1 MB的文件。小心。
find
。:)
find
限制了被调用进程的参数数量以适合系统的限制rm *
,而后者被保证是单个进程调用。 如有必要,find
将调用的多个实例rm
。而且我非常确定特殊字符(包括换行符)会得到正确处理。我喜欢-exec rm
过-delete
的灵活性的原因-作为一个例子,后者的报价没有办法删除写保护的文件。
-1M
表示小于所需的1兆字节。您的版本将删除大小恰好为1兆字节的所有文件,这似乎是没有意义的操作。
find . -type f -size +1M -exec rm {} +
。请注意+ 1M,而不是-1M。
这应该可以完成以下工作:
$ find <directory> -type f -size -1M -delete
-
符号是减号,表示“小于1M”。如果运行find <directory> -type f -size +1M -delete
,将删除所有大于 1M的文件。
仅出于多样性和可能的(可能是边际的)性能提升:
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargs
过程。
您可以查看此链接http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/,它正是您想要的。
for file in *;
do
file_size=$(du $file | awk '{print $1}');
if [ $file_size == 0 ]; then
echo "Deleting empty file $file with file size $file_size!";
echo "rm -f $file";
fi;
done
您可以使用for循环遍历所有文件,然后像上面的示例一样使用du和awk查找文件大小。
1M
。