你好,这里是网络技术联盟站。
使用Windows的朋友大家都使用过各类电脑管家,时不时去扫描电脑中有没有大文件,因为大文件会占用很大的磁盘空间,造成浪费,这个在Windows系统中很好实现,但是如果是Linux系统呢?
Linux 是一个基于文件的操作系统,其中包含许多不同大小的文件,在日常使用过程中,系统或用户会创建或下载大量文件,这样会消耗大量磁盘空间,从而导致存储错误或警告,本文瑞哥将教大家如何查找出Linux中的大文件。
1、find命令
find是Linux中使用最频繁的查找命令之一,谈到查到文件,那么find最有说话权,那么如何用find命令去查询大文件呢?
我们来举几个例子给大家参考:
1.1 查找某个目录下大小大于50M的文件
命令如下:
find /mnt/d/素材/ -xdev -type f -size +50M
执行结果:
如图,目录/mnt/d/素材
中都是各种书籍和资料,所以查出来的结果比较多。
find /mnt/d/素材/ -xdev -type f -size +50M
命令中我们知道find
命令,/mnt/d/素材/
是目录,那么其他的参数是什么意思呢?
- -xdev:代表仅在当前文件系统搜索
- -type f:代表类型是文件file
- -size:代表文件的大小
- +50M:代表文件的大小大于50M
-50M代表文件的大小小于50M
这个执行结果大家有没有疑问,虽然是大于50M的文件,但是我不知道这个文件的大小到底是多大,怎么样才能打印出每个文件的大小呢?
1.2 查找某个目录下大小大于50M的文件,并且显示出每个文件的大小
find /mnt/d/素材/ -xdev -type f -size +50M -print | xargs ls -lh
执行结果:
如图查出来的文件结果都有大小,命令也很好理解,在上面的命令后面加-print | xargs ls -lh
。
- -print:打印。
- xargs:这个简单理解为将之前的命令作为参数传递给下一个命令,其实就是将
find /mnt/d/素材/ -xdev -type f -size +50M -print
的结果作为参数传递给ls -lh
命令。 - ls -lh:列举文件列表,并显示文件详细信息,包括文件大小。
从上面的截图中,大家也注意到了,虽然文件大小能看到了,但是这个适合我想看的爽心悦目,换句话说我想让结果按照文件大小进行排序,这个时候应该怎么办呢?
1.3 查找某个目录下大小大于50M的文件,并进行排序
这个时候我们可以基于1.2的命令进行改造:
find /mnt/d/素材/ -xdev -type f -size +50M -print | xargs ls -lh
这个命令已经显示大于50M的文件列表,并且列表中也显示了文件的具体信息,其中文件的大小在第5列,那么我们可以将find /mnt/d/素材/ -xdev -type f -size +50M -print | xargs ls -lh
命令整体进行管道处理,根据第5列进行降序排序:
find /mnt/d/素材/ -xdev -type f -size +50M -print | xargs ls -lh | sort -k 5 -rh
执行结果:
很神奇吧,显示的结果已经根据文件的大小进行排序了,最大的文件841M,最小的52M。
我们来看下sort -k 5 -rh
:
- sort:这个不用解释了,排序的命令。
- -k 5:k几就是根据列表中第几列进行排序,在上面的例子中,显示的文件列表信息第5列代表的是文件的大小,所以这里的k 5就是指根据第5列进行排序。
- rh:反向也就是倒序排序。
我们再来演示一下一个例子,上面的列表数很多,假如我们只想查看排名前5的文件,这个时候怎么去查询呢?
1.4 查找某个目录下大小大于50M的文件,且排名前5的
在公布命令前,大家回想一下,如果对于一个文件的话,我们想要查看这个文件的前5行信息,我们应该用哪个命令?
没错,就是head
,在这里我们同样可以将1.3的命令作为管道传给head
命令进行处理,即将find /mnt/d/素材/ -xdev -type f -size +50M -print | xargs ls -lh | sort -k 5 -rh
命令传递给head
:
find /mnt/d/素材/ -xdev -type f -size +50M -print | xargs ls -lh | sort -k 5 -rh | head -n 5
执行结果:
我们可以看出,列表就是排名前5名的文件列表。
- head 5:就是前5的意思。
以上就是find命令的使用,下面我们再来介绍第2个命令:du
2、du
du命令是disk usage
的缩写,意思就是磁盘使用。很明显,du命令就是列出文件和文件夹的磁盘使用情况或存储使用情况。
我们也可以用du命令结合sort、head等命令达到找出大文件的效果。
我们先来介绍一下du
命令的基本使用:
du -ah /mnt/d/素材/PDF
执行结果:
如图,目录/mnt/d/素材/PDF
都是PDF书籍,du -ah
命令中:
- -a:代表文件详细信息
- -h:将文件大小格式化
查找某个目录下最大的文件
如果用find命令应该怎么做?
find /mnt/d/素材/PDF | sort -k 5 -rh | head -n 1
这个意思很好理解,先倒叙排序,然后找到第一个,那么第一个一定最大。
如果用du命令应该怎么做呢?
一方面,我们直接使用du命令查询排名前几个的文件,用肉眼去观察最大的:
du -ah /mnt/d/素材/PDF | sort -k 1 -rh | head
执行结果:
如果,我们看到结果中第一行是/mnt/d/素材/PDF
目录的总大小,第二行501M /mnt/d/素材/PDF/深入理解计算机系统 第三版.pdf
才是最大的那个文件。
这个看起来有点难受呀,我明明就想找出最大的文件,不想去肉眼去判断,这个时候怎么办?
du命令不能直接去实现,需要结合find命令去指定文件类型,我们来看下下面这条命令:
find /mnt/d/素材/PDF -type f -exec du -ah {} + | sort -k 1 -rh | head -n 1
执行结果:
先看结果,是不是达到了我们的预期效果,很显然是的。
我们来解释一下这条“长长”的命令find /mnt/d/素材/PDF -type f -exec du -ah {} + | sort -k 1 -rh | head -n 1
,其实这个命令也很简单,我们将其拆分成三个部分:
find /mnt/d/素材/PDF -type f
-exec
du -ah {} + | sort -k 1 -rh | head -n 1
find /mnt/d/素材/PDF -type f
不用说了,我们上面讲过,意思就是在/mnt/d/素材/PDF
目录下搜索,并且搜索的类型是文件。
-exec
意思就是执行命令,将查找到命令后将结果传输到下一个命令,有点像管道的意思,find的结果将包裹在{}中。
du -ah {} + | sort -k 1 -rh | head -n 1
命令就是展示某个目录下文件的详细信息,并且根据第一列进行倒序排序,并且选择展示第一个文件。
最终我们就能通过此命令找出大小最大的文件。
3、ls
ls命令我说是Linux系统中使用最为频繁的命令,大家没有意见吧?如果说ls也能找出最大的文件或者排好序的文件列表的话,那该有多爽。
ls命令还真能达到如此效果,我们先直接放出命令:
ls -lSh /mnt/d/素材/PDF | head -5
执行结果:
看到这里,是不是直呼牛逼,虽然不是一次性查出最大的文件,不过那么简洁的命令我觉得最舒服了,还记那么长的命令干啥。
我们来看下ls的几个参数:
- -l:长格式,也就是显示文件的详细信息
- -S:根据文件的大小进行排序
- -h:格式化文件大小,人类易读
总结
在Linux中查找大文件的场景非常多,本文瑞哥给大家介绍了三个命令:find、du、ls。其中find命令最为灵活,扩展性强,但是论命令简单,还是ls是王者。
最后感谢您的阅读,如果觉得文章对您有帮助,别忘了点赞👍、收藏⭐哦!有任何问题,欢迎在下方评论区与我讨论!!!