一、查找某个目录下最大的10个文件
find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 10
注:-print0的目的是为了避免查找的文件中文件名包含空格会引起后续的xargs命令出现问题。-print0和xargs后面的-0是对应的。
二、查找已被删除但是磁盘空间未释放的最大的10个文件
lsof -s | grep deleted | sort -nr -k7 | head -n 10
注:何时会执行这个命令呢?一般的心路历程大致如下:通过df命令发现磁盘空间不足,然后通过上文的命令一,找到最大的N个文件(一般都是些日志文件),通过rm命令将这些文件删除,然后df发现磁盘空间并没有释放掉。这是由于打开这些文件的进程并没有终止导致的,因此需要通过该命令找出打开这些文件的进程号,再kill -9将其杀掉,空间即可释放。命令中之所以加上-s是为了跟后面的sort配合,sort中的-k7的含义是根据第7列进行排序,默认不指定-s的话,lsof命令显示的第7列的列名为"SIZE/OFF",显然表示这一列会有两种含义,对于有大小的文件,这一列展示文件的大小,但是有些文件是没有大小的,如TCP连接,这时这一列的值会展示"0t0"这种的形式,显然不能跟文件大小这样的数值一起排序,因此指定-s,那么这一列的列名就只会显示"SIZE",对于那些没有大小的文件,这一列的值会留空。
三、查找当前目录下创建时间大于3天的文件并删除
find . -ctime +3 -exec rm -rf {} \;
注:-ctime中的’c’表示创建时间,如果是访问时间则是-atime,如果是修改时间则是-mtime,
find
与-exec
选项结合具有非常大的威力,-exec
后面跟上需要执行的命令,{}
代表find找出来的每一项目录或者文件,\;
用于结束命令。