【问题标题】:How to display the top largest files in the format below using bash如何使用 bash 以以下格式显示最大的文件
【发布时间】:2015-01-06 19:23:32
【问题描述】:
-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 和任何递归命令来完成任务

【问题讨论】:

  • 尝试使用dusort 和head/tail。然后,对于格式化,您可以使用 awk
  • 它是一个分配,不允许使用 du、locate、find 和任何递归命令来完成任务。
  • 那么你应该编辑你的问题!另外,添加您迄今为止尝试过的内容。
  • Its for an assignment 但 OP 根本没有尝试过
  • 我做了一个尝试,几乎完美,TOP=$(ls -ls -a -S -h -p | head -6 | awk '{$6, $10}')

标签: bash shell


【解决方案1】:

你可以使用这个statsortawk组合:

stat -c "%n:%F:%s" * | sort -t: -rnk3,3 | awk -F: '$2=="regular file"{
    printf "%25s\t%s bytes\n", $1, $3} 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 命令搜索条件为$2=="regular file" 的所有行(仅打印常规文件)并使用printf 打印格式化输出。 NR>5{exit} 在打印 5 行后退出 awk 进程。

【讨论】:

  • 这个解决方案看起来不错,而且似乎确实可以解决问题。你能解释一下它是如何工作的吗?它看起来有点复杂。像下面这样的解释会很受欢迎。但是,如果您没有任何时间,那也没有问题。谢谢,
  • 我不能让它产生与示例输出相同的结果
  • @Jasen:它适用于 OP 和我。你是说这个Top 5 files: 标题吗?
  • OP 很满意,如果他想在他的作业上作弊,这对我来说很好,谷歌会告诉他的导师他从哪里得到他的代码,我的意思是在子目录中找到的示例文件。
【解决方案2】:
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

【讨论】:

  • 虽然这个答案很完美,但我不能使用它,我不能使用 du 或任何递归命令。我需要另一种方式。
【解决方案3】:

因为这是一项任务,我只会让你开始。 你可能想从

for x in * .* 

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2021-05-03
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多