Linux如何查找大文件或大目录

上一篇 / 下一篇  2016-12-12 16:54:05 / 个人分类:Linux

一、查找大文件:
需要了解当前系统下有哪些大文件,比如文件大小超过100M或1G。
那么如何把这些大文件搜索出来呢?例如我要搜索当前目录下,超过800M大小的文件
find . -type f -size +800M  -print0 | xargs -0 du -h | sort -nr
注:不过有时候排列的顺序并不完全是按大小一致,这个是因为du命令的参数h所致,你可以统一使用MB(参数m)来显示,这样就能解决这个问题。

备注:
-print0的作用:
-print 在每一个输出后会添加一个回车换行符,-print0则不会,而是输出一个 NULL 字符 ('\0') 。
xargs -0的作用:
xargs -0将\0作为定界符。

[bash-4.1.5] ; find -name '*.log' | xargs rm
rm: cannot remove `./file': No such file or directory
rm: cannot remove `1.log': No such file or directory
rm: cannot remove `./file': No such file or directory
rm: cannot remove `2.log': No such file or directory
 
原因其实很简单, xargs 默认是以空白字符 (空格, TAB, 换行符) 来分割记录的, 因此文件名 ./file 1.log 被解释成了两个记录 ./file 和 1.log, 不幸的是 rm 找不到这两个文件.

为了解决此类问题, 聪明的人想出了一个办法, 让 find 在打印出一个文件名之后接着输出一个 NULL 字符 ('\0') 而不是换行符, 然后再告诉 xargs 也用 NULL 字符来作为记录的分隔符. 这就是 find 的 -print0 和 xargs 的 -0 的来历吧.


二、查找目录:
由于平时又疏于管理,监控文件或日志文件的增长,有时候会占用大量甚至挤爆磁盘空间。
这时需要快速了解哪些目录变得比较大,此时可以借助du命令来帮我们解决这个问题。
du -h --max-depth=1
结果:
16K     ./lost+found
33G     ./flash_recovery_area
37G     ./oradata
70G     .

如果想知道flash_recovery_area目录下面有哪些大文件夹,那么可以将参数max-depth=2
如果你想对搜索出来的结果进行排序,那么可以借助于sort命令。如下所示:
du -h --max-depth=2 | sort -n
结果:
3.5G    ./flash_recovery_area/EPPS
16K     ./lost+found
29G     ./flash_recovery_area/backup
33G     ./flash_recovery_area
37G     ./oradata
37G     ./oradata/epps
70G     .

有时候搜索出来的结果太多了(譬如,从根目录开始搜索),一直在刷屏,
如果只想查出最大的10个文件夹,怎么办呢?此时就要借助head命令来显示了
du -hm --max-depth=2 | sort -nr | head -10
结果:
407480  .
167880  ./u04
158685  ./u02/oradata
158685  ./u02
152118  ./u04/oradata
70775   ./u03
37705   ./u03/oradata
33070   ./u03/flash_recovery_area
5995    ./u01/app
5995    ./u01

TAG: Linux 如何

 

评分:0

我来说两句

日历

« 2024-04-23  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 21662
  • 日志数: 5
  • 建立时间: 2016-05-27
  • 更新时间: 2016-12-12

RSS订阅

Open Toolbar