Linux拓展之查找指定目录下的最大文件

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux拓展之查找指定目录下的最大文件相关的知识,希望对你有一定的参考价值。

概述

有时候我们需要查找指定目录下的最大文件,通常说的指定目录包括该目录下的所有文件和子目录下的所有文件。如下是几种能查找最大文件的方法。



方法一

查找指定目录下的最大文件,但不包括所有子目录,只包括当前目录。命令格式如下:

# 语法
ls -lShr 指定目录 | tail -n 1
# 示例,查找 /root/ 目录下的最大文件
ls -lShr /root/ | tail -n 1

说明如下:

  • ls -lShr /root/:从小到大列出 /root/ 目录下的所有文件。
    • -l 选项:列出指定目录下的所有文件,以列表的形式。
    • -S 选项:对于列出的所有文件按照文件大小排序,默认降序。
    • -h 选项:以人类可读性的方式显示,即文件大小以 kM 的方式显示。
    • -r 选项:逆序排序。
  • tail -n 1:找到列出文件中的最后一个文件,即最大文件。
    • -n 选项:获取结果的最后一行。按照逆序排序后,最大文件则位于最后一行。

如图:



方法二

查找指定目录下的最大文件,包括当前目录和其下所有递归子目录。命令格式如下:

# 语法
find 指定目录 -type f -printf "%s\\t%p\\n" | sort -n | tail -n 1
# 示例,查找 /root/ 目录下的最大文件
find /root/ -type f -printf "%s\\t%p\\n" | sort -n | tail -n 1

说明如下:

  • find /root/ -type f -printf "%s\\t%p\\n":查看 /root/ 目录下的所有普通文件,只显示文件大小和文件路径。
    • -type f 选项:表示只查找普通文件。
    • -printf "%s\\t%p\\n" 选项:表示只打印显示文件大小和文件路径。 %s 符号表示文件大小以字节的方式;%p 符号表示文件名,即路径的方式。
  • sort -n:对列出的所有文件按数字进行排序。默认是从小到大,所以最大的文件在最后一行。
    • -n 选项:表示按照数字排序,默认是从小到大。
  • tail -n 1:获取排序后文件列表的最后一行,即最大文件。
    • -n 1 选项:表示获取最后一行。

如图:



方法三

查找指定目录下的最大文件,包括当前目录和其下所有递归子目录。命令格式如下:

# 语法
find 指定目录 -type f -print0 | xargs -0 du -h | sort -rh | head -n 1
# 示例,查找 /root/ 目录下的最大文件
find /root/ -type f -print0 | xargs -0 du -h | sort -rh | head -n 1

说明如下:

  • find /root/ -type f -print0:查找 /root/ 目录下的所有普通文件,并且输出完整的文件名,每个文件之前通过空字符 NUL'\\0')分隔。
    • -type f:指定只查找普通文件。
    • -print0:输出显示完整的文件名,每个文件之间通过一个空字符 NUL'\\0')分隔。

  • xargs -0 du -h:以可读的方式显示每个文件和它的大小。
    • xargs:该命令可以将标准输入转换成命令行参数。
    • -0:以空字符 NUL'\\0')分隔文件列表。
    • du -h:以可读的方式计算显示文件在磁盘空间使用的情况。

  • sort -rh:以可读的方式逆序排序。
    • -r:逆序排序结果。
    • -h:以可读格式打印输出。

  • head -n 1:获取第一行,即最大文件。
    • -n 1 选项:获取第一行,即最大文件。


注,如下还有几个类似的命令组合都能获取指定目录下的最大文件,都属于 find 命令的应用:

# 语法一
find 指定目录 -type f -exec du -Sh  + | sort -rh | head -n 1
# 示例一
find /root/ -type f -exec du -Sh  + | sort -rh | head -n 1

# 语法二
find 指定目录 -type f -print0 | xargs -0 du | sort -n | tail -n 1 | cut -f 2 | xargs -I  du -sh 
# 示例二
find /root/ -type f -print0 | xargs -0 du | sort -n | tail -n 1 | cut -f 2 | xargs -I  du -sh 

# 语法三
find 指定目录 -type f -ls | sort -k 7 -n -r | head -n 1 | column -t | awk 'print $7,$11'
# 示例三
find /root/ -type f -ls | sort -k 7 -n -r | head -n 1 | column -t | awk 'print $7,$11'

以上是关于Linux拓展之查找指定目录下的最大文件的主要内容,如果未能解决你的问题,请参考以下文章

linux下使用du命令查找最大的文件

Linux文件查找之Find详解

Linux之find命令详解

Linux基础命令之文件和目录操作

Linux—一文掌握Linux基本命令(上)

Linux Shell之递归读取指定目录下的所有文件