如何使用 bash 以下面的格式显示最大的文件

How to display the top largest files in the format below using bash

-bash-4.1$ ./folder-stats-2.sh 
Top 5 files:
    ./index.html                 4000 bytes
    ./CS133/lab1.html            3245 bytes
    ./CS118/CW1/Ex1.java         2512 bytes
    ./CS118/CW2/GrandFinale.java  204 bytes
    ./.bashrc                      20 bytes

我正在编写一个 bash 脚本,我想知道当脚本在当前目录中运行时如何找到前 5 个最大的文件。提前致谢。

编辑:这是一项任务,不允许使用 du、locate、find 和任何递归命令来完成任务

du -ab |sort -nr|head -6

在上一行:

du 

-a : all files
-b : use byte as unit

sort

-n : sort as number
-r : reversely

head -6 : we take the first 6 lines, 
          because the 1st line output by `du` 
          is the total size of your directory..

输出格式如下:

777777  .
77777   ./foo/bar
7777    ./foo/bar/a.big
777     ./foo/bar/b.big
77      ./foo/bar/blah/bigfile
7       ./other/dir/file

您可以使用此 statsortawk 组合:

stat -c "%n:%F:%s" * | sort -t: -rnk3,3 | awk -F: '=="regular file"{
    printf "%25s\t%s bytes\n", , } NR>5{exit}'
                  foo.txt   639 bytes
                   bar.sh   453 bytes
              myscript.sh   383 bytes
                   baz.pl   330 bytes
                 proc.sql   328 bytes
  • stat -c "%n:%F:%s" 打印所有文件名、文件类型和文件大小
  • sort -t: -rnk3,3 用于对第 3 列(大小)
  • 进行反向数字排序
  • awk 命令搜索条件为 =="regular file" 的所有行(仅打印常规文件)并使用 printf 打印格式化输出。一旦我们打印了 5 行,NR>5{exit} 退出 awk 进程。

因为这是一项作业,所以我只会让您入门。 你可能想从

开始
for x in * .* 

然后在循环中检查“$x”是否是文件、目录或符号链接

  • ... 你会想要忽略
  • 符号链接,我猜你也忽略了
  • 您检查大小的文件,如果在前 5 个中,请记住它们
  • 递归到的目录。

当循环结束时,打印结果。