日常我们在管理后台的时候,经常会碰到要找出当前目录中比较大文件,一般要将他们move掉或者直接删除,下面这句脚本即可实现:
du -ah . | sort -nrk 1 | head
这个语句就是找出前10个文件
其中,du 命令计算当前目录和目录中各个文件的大小
-a参数是递归地输出指定目录或对个目录中所有文件的统计结果
-h参数以更友好的方式输出 sort 命令顾名思义就是用来排序的命令
-n 让sort命令按照数值进行排序,否则会按字符进行排序,导致2<1这种情况发生
-r sort默认按降序进行排序 此参数指定sort命令按升序排序
-k 指定排序的列 另外sort命令还有一些参数
-t 指定域之间的间隔符 默认为空格或者/t
-f 忽略大小写
-u 取出重复行
head 就不需要多讲了 默认取出前10行数据
这条语句有一个缺点,就是第一行返回的其实是目标目录,因为du会在最后一行返回目标目录的大小和统计,我们的目的是找目标目录下的大文件,因此我们想要的其实是2到11行。找出排序后的2到11行 按照我之前写过的显示某几行数据文章,可以这么写
du -ah . | sort -nrk 1 | tail -n +2 | head -n 10
这样获取的方法又有一个缺点,就是我们获取到的文件有可能是一个目录,这可能不是我们想要的,如果我们当初就是想找出大文件并删除,我们可以通过下面的方法
2. 先将目录过滤掉再进行排序
find . -type f -exec du -k {} \; | sort -nrk 1 | head
find命令格式: find pathname -options [-print -exec -ok …] options
经常用到的参数有
-name 按照文件名查找文件
-perm 按照文件权限来查找文件
-type 查找某一类型的文件,诸如: b - 块设备文件 d - 目录 c - 字符设备文件 p - 管道文件 l - 符号链接文件 f - 普通文件
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
这样,就可以获取到我们指定的目录下前10个最大的文件了。