没有哪个单独的命令是可以做到这一点的,UOS系统为linux,但Linux命令的特点就是可以多个命令结合使用 比如管道符 | ,就可以将一个命令的输出座位另一个命令的输入,这个想必也是人尽皆知的。
首先说下思路1、首先要先查找指定文件夹下的文件的路径
2、打印出指定文件夹下的文件大小
从这里看到,find并没有去查找指定的文件夹下的文件(思路并没有错)
3、把打印出的文件从大到小进行排序
head -n 3表示只查看3个结果,这个一定要放到最后 这里也没有去查找指定的文件夹,肯定是find的输出传给du命令时出现了问题,原因是因为find的输出的文件名加一个换行符,导致du命令接受find的输出的时候出错了,du命令就打印了当前目录下的文件,不过问题不大,我们用-print0 选项把 find 输出的换行符改成 \0,这个大家很熟悉吧,字符串的结束标志,再配合用 xargs 将其分割成小块传给 du 命令,接下来我们试一下
4、find /var/log -type f -print0 | xargs -0 du -h | sort -rh | head -n 3
这下我们可以看到输出的是我们指定的/var/log文件夹了 温馨提示:在服务器上尽量不要使用find / ,有可能会崩溃的
如果嫌这个命令太长的话,我们可以写个脚本去代替这个长长的命令 脚本我给大家贴在下面了 #!/bin/bash
#FileName: findName.sh #Date: 2021-09-22 #Description: 此脚本可以查找出指定目录下的最大的一个文件 #脚本用法: 1、 前提是使用root用户执行 ./findName.sh /var/log # 2、 普通用户执行 sudo ./findName.sh /var/log 注意:"/var/log"这个是文件目录,可以进行自定义
if [ $# -lt 1 ];then echo "请输入您要查找的路径" exit 2 fi
find $1 -type f -print0 | xargs -0 du -h | sort -rh | head -n 1
这里是脚本用法哦,脚本我也上传附件了,有需要的可以下载下来用
|