Linux中的根据文件大小列出和排序文件
Contents
1. 概述
作为 Linux 用户,我们经常与文件系统进行交互。其中一项常见任务是列出文件并根据它们的大小对其进行排序。 在本教程中,我们将讨论实现此目的的各种方法。
2. 使用du和sort命令
让我们创建一组文件和目录以用作示例:
$ 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
我们可以使用du 和sort 命令根据文件大小列出和排序文件:
$ 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. 使用ls和sort命令
我们可以使用*ls 、grep 和sort*命令的组合来根据文件大小列出和排序文件:
$ 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. 使用find和sort命令
最后,我们可以结合使用find 和sort命令来根据文件大小列出和排序文件:
$ 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:*按文件大小升序排列文件。在本例中,我们使用第七列作为排序键