📌  相关文章
📜  按大小列出所有文件 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:39:48.484000             🧑  作者: Mango

按大小列出所有文件 - Shell-Bash

在Shell-Bash中,我们可以使用ls命令列出当前目录中的所有文件。但是,默认情况下,ls命令只是按照字母顺序列出文件,没有按照文件大小排序。如果我们想要按照文件大小列出文件,该怎么办呢?这时,可以使用dusort命令结合来实现按照文件大小列出文件的功能。

下面,我们先来介绍一下du命令和sort命令的基本用法,然后再介绍具体如何结合使用。

du命令

du命令可以计算文件或目录的磁盘使用情况,主要用于显示文件或目录的大小。du命令的基本用法如下:

du [选项] [文件或目录]
  • 选项:

    • -a:显示所有文件和目录的大小。
    • -c:显示所有文件和目录的总大小。
    • -h:以人类可读的方式显示文件大小。
    • -s:仅显示总大小。
  • 文件或目录:指定要计算的文件或目录。

例如,要计算当前目录下的所有文件和目录的大小,可以执行以下命令:

du -ah
sort命令

sort命令可以将文本文件的行排序,并将结果输出到标准输出。sort命令的基本用法如下:

sort [选项] [文件]
  • 选项:

    • -n:按照数值排序。
    • -r:按照倒序排序。
  • 文件:指定要排序的文件。

例如,将文件test.txt中的行按照数值排序,可以执行以下命令:

sort -n test.txt
按照文件大小列出文件

现在,我们来结合dusort命令,实现按照文件大小列出文件的功能。具体步骤如下:

  1. 使用du命令计算当前目录下所有文件和目录的大小,输出到标准输出。
  2. 将标准输出中的每行文本按空格分割成多个字段,取第1个字段(即文件或目录的大小)和第2个字段(即文件或目录的路径)。
  3. 使用sort命令按照数值排序,以文件或目录的大小作为排序依据。
  4. 将排序结果输出到标准输出。

具体实现如下:

du -ah | awk '{print $1 "\t" $2}' | sort -n | awk '{print $2 "\t" $1}' | sed 's/.\{4\}$//' | awk 'BEGIN {print "文件路径\t\t文件大小"} {printf "%s\t\t%s\n", $1, $2}'

这段命令的作用是,首先使用du -ah命令计算当前目录下所有文件和目录的大小,输出到标准输出;然后使用awk命令将每行文本按空格分割成多个字段,并取第1个(文件或目录的大小)和第2个(文件或目录的路径)字段;接着使用sort命令按照数值排序,以文件或目录的大小作为排序依据;之后再使用awk命令将每行文本的第1个和第2个字段交换位置;最后再使用sedawk命令对输出的结果进行格式化,便于阅读。

输出结果示例如下:

文件路径              文件大小
./dir1                0
./file1.txt           100
./dir2                1024
./file2.txt           2048
./dir3                4096
./file3.txt           8192

完整代码片段如下:

```shell
du -ah | awk '{print $1 "\t" $2}' | sort -n | awk '{print $2 "\t" $1}' | sed 's/.\{4\}$//' | awk 'BEGIN {print "文件路径\t\t文件大小"} {printf "%s\t\t%s\n", $1, $2}'