概述
有时候我们需要查找指定目录下的最大文件,通常说的指定目录包括该目录下的所有文件和子目录下的所有文件。如下是几种能查找最大文件的方法。
方法一
查找指定目录下的最大文件,但不包括所有子目录,只包括当前目录。命令格式如下:
# 语法
ls -lShr 指定目录 | tail -n 1
# 示例,查找 /root/ 目录下的最大文件
ls -lShr /root/ | tail -n 1
说明如下:
ls -lShr /root/
:从小到大列出/root/
目录下的所有文件。-l
选项:列出指定目录下的所有文件,以列表的形式。-S
选项:对于列出的所有文件按照文件大小排序,默认降序。-h
选项:以人类可读性的方式显示,即文件大小以k
、M
的方式显示。-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}'