写点什么

2000 多字教你三招在 Linux 中找出大文件,最后一个命令简直太简单了!

作者:wljslmz
  • 2022 年 8 月 05 日
  • 本文字数:2724 字

    阅读完需:约 9 分钟

2000多字教你三招在Linux中找出大文件,最后一个命令简直太简单了!

你好,这里是网络技术联盟站。


使用 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 是王者。


最后感谢您的阅读,如果觉得文章对您有帮助,别忘了点赞👍、收藏⭐哦!有任何问题,欢迎在下方评论区与我讨论!!!

发布于: 刚刚阅读数: 3
用户头像

wljslmz

关注

极致主义者,追求技术的路上,勇往直前! 2021.05.24 加入

订阅号:网络技术联盟站 个站:https://www.wljslmz.cn

评论

发布
暂无评论
2000多字教你三招在Linux中找出大文件,最后一个命令简直太简单了!_Linux_wljslmz_InfoQ写作社区