Contents

Linux中的根据文件大小列出和排序文件

1. 概述

作为 Linux 用户,我们经常与文件系统进行交互。其中一项常见任务是列出文件并根据它们的大小对其进行排序。 在本教程中,我们将讨论实现此目的的各种方法。

2. 使用dusort命令

让我们创建一组文件和目录以用作示例:

$ mkdir dir1 dir2
$ fallocate -l 850K dir1/file1.dat
$ fallocate -l 450M dir2/file2.dat
$ fallocate -l 750M dir1/file3.dat
$ fallocate -l 1.2G file4.dat

现在让我们看看我们刚刚创建的目录树:

$ tree -h
.
├── [4.0K]  dir1
│   ├── [850K]  file1.dat
│   └── [750M]  file3.dat
├── [4.0K]  dir2
│   └── [450M]  file2.dat
└── [1.2G]  file4.dat
2 directories, 4 files

我们可以使用dusort 命令根据文件大小列出和排序文件:

$ du -ah --max-depth=1 | sort -h
451M	./dir2
751M	./dir1
1.2G	./file4.dat
2.4G	.

让我们看看我们用于du命令的选项:

  • *-a:*报告所有文件的大小,而不仅仅是目录的大小
  • -h:以人类可读的格式报告大小,如千字节 (K)兆字节 (M)、*千兆字节 (G)*等
  • –max-depth:报告第一级目录的总大小

我们可以在sort命令上使用*-r*选项以降序生成输出。

另请注意,这种方法仅适用于我们要按大小对整个目录进行排序的情况,而不仅仅是单个文件。

3. 使用lssort命令

我们可以使用*ls grepsort*命令的组合来根据文件大小列出和排序文件:

$ ls -lhR | grep '^-' | sort -k 5 -h
-rw-r--r-- 1 jarvis jarvis 850K Apr 12 21:47 file1.dat
-rw-r--r-- 1 jarvis jarvis 450M Apr 12 21:47 file2.dat
-rw-r--r-- 1 jarvis jarvis 750M Apr 12 21:47 file3.dat
-rw-r--r-- 1 jarvis jarvis 1.2G Apr 12 21:47 file4.dat

在上面的示例中,*grep ‘^-’*命令从输出中排除目录。

现在让我们看看我们用于ls的选项:

  • -l:使用长列表格式。文件大小显示在第五
  • -h:以人类可读的格式报告大小,如千字节 (K)兆字节 (M)、*千兆字节 (G)*等
  • *-R:*通过子目录重复

对于sort命令,我们使用:

  • -k:使用键执行排序。在此示例中,第五列用作排序键

4. 使用findsort命令

最后,我们可以结合使用findsort命令来根据文件大小列出和排序文件:

$ find . -type f -ls | sort -n -k7
2752740     852 -rw-r--r--   1 jarvis   jarvis       870400 Apr 12 21:47 ./dir1/file1.dat
2752741  460804 -rw-r--r--   1 jarvis   jarvis    471859200 Apr 12 21:47 ./dir2/file2.dat
2752742  768004 -rw-r--r--   1 jarvis   jarvis    786432000 Apr 12 21:47 ./dir1/file3.dat
2752743 1253380 -rw-r--r--   1 jarvis   jarvis   1283457024 Apr 12 21:47 ./file4.dat

让我们看看我们使用的find命令选项:

  • -type f -ls:对每个文件使用长列表格式的ls命令。文件的大小显示在第七列。

对于sort命令,我们使用:

  • *-n -k7:*按文件大小升序排列文件。在本例中,我们使用第七列作为排序键