掘金 后端 ( ) • 2022-08-12 17:37

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情

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

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

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