没有那个单独的命令可以做到这一点,但Unix/Linux 命令的特点就是多个命令可以结合使用
比如管道命令 | ,可以将一个命令的输出作为另一个命令的输入,这大概是最强大的命令了吧,这个一定要学会,比如我就很喜欢用 cat xxx | grep xxx ,也没啥特别,就是找出文件中含 xxx 的部分
回到如何快速找出当前目录下最大的几个文件这个问题
说下思路
1. 先打印出所有的文件的路径 find ./ -type f
2. 打印出以上文件的大小 du -h
3. 对以上文件从大到小排序 sort -rh
这个 sort 命令有点意思,他并不能按文件大小排序,它能做的就是把一排排的文本按 ASCII 码的顺序打印出来,感叹一句 Unix/Linux 命令真是巧妙
5. 只需要 10 个结果 head -n 10,这个要放最后
大家看到这里应该发现问题了,第一步 find 明明只打印了文件,到后来怎么出现了文件夹
其实我也很疑惑,肯定是 find 通过这个管道传递给 du 的过程中出了问题
查了一下资料,find 的输出是文件名加一个换行符du 接受这个输入时会出现问题,我们需要用 -print0 选项把 find 输出的换行符改成 0,这个大家很熟悉吧,字符串的结束标志,再配合用 xargs 将其分割成小块传给 du 命令
这里可能有点难以理解,我也是,Unix/Linux 命令博大精深
最终命令
find ./ -type f -print0 | xargs -0 du -h | sort -rh | head -n 10
是不是觉得太长,改个名字吧,不如叫 fmax
大家千万别再服务器上用find / ,极有可能崩溃
更多命令可以查看这篇文章:
如何在 Linux 中查找最大的 10 个文件ok了,希望这篇文章能对大家有所帮助
欢迎订阅「玩转Linux」专栏或者是关注我,及时收到文章更新
玩转Linuxzhuanlan.zhihu.com