在UNIX中工作的常见问题之一是找到大文件来释放一些空间。假设您的文件系统已满,并且您收到警报释放空间,或者如果主机空间不足,并且您的服务没办法启动,您首先要查找的是十大文件,看看是否可以删除大文件。如果是Java应用程序或在Tomcat上运行的Web应用程序,那么可以删除这些堆文件释放出空间,但最重要的问题是如何找到它们?你如何知道文件系统中最大文件的大小,在哪个目录?我们将在本文中尝试找到其中一些问题的答案。
当我刚刚到Linux时,我没有别的选择,只能去日志目录,查找更大的旧文件并删除它们。服务器运行得很好,直到有一天我们的服务器因为特大的缓存文件被挂掉。无法定位到文件所在目录,然后我开始了解find命令,且搜索大文件的子目录,如下所示:
$ find . -size +1G
如上命令将从当前目录和及子目录打印出大于1GB的所有文件。唯一的问题是它不能精确的打印出大小。使用 -printf选项可以解决问题,该选项允许您指定格式String,就像Java的printf()方法一样。
进一步调整命令来查找文件,且精确的打印出文件大小。
$ find . -size +1G -printf '%s %p\n'
%s表示大小,%p表示路径。
或者,还可以使用-exec选项在每个文件上运行ls,find命令返回且打印其大小,如下所示:
$ find . -size +100M -exec ls -sh {} \;
这个命还算可以,够用。让我们接着看看更好的一种用法,如下命
$ du -a . | sort -n -r | head -n 10
16095096 .
13785288 ./logs
6095380 ./logs/app
2125252 ./temp
2125244 ./temp/data
2125240 ./temp/data/app
此命令以排序的方式列出了大小前10的目录和文件,如此一天就很容易定位到大文件所在位置
翻译:http://www.java67.com/2017/08/how-to-find-large-files-with-size-in-Linux.html