【问题标题】:get the size and other info with the "du" command使用“du”命令获取大小和其他信息
【发布时间】:2013-12-09 07:32:01
【问题描述】:

我在 bash 上做了一个小脚本,它显示了以 mb 为单位的总大小、文件的数量、文件夹的数量和文件夹的名称。 除了 mb 的大小,我几乎什么都有

du -a -h | cut -d/ -f2 | sort | uniq -c

显示如下:

  4 01 folder 01
  6 02 folder 02
 11 03 folder 03
 13 04 folder 04
 16 05 folder 05
 .....
 15 13 folder 13
  1 5.7G    .

如您所见,排序是:文件数、文件夹数和名称。

我想要这个:

  300M 4 01 folder 01
  435M 6 02 folder 02
  690M 11 03 folder 03
  780M 13 04 folder 04
  1.6G 16 05 folder 05
 .....
 15 13 folder 13
  1 5.7G    .

提前谢谢你。

PD 有什么方法可以像这样在每列上显示名称吗?

  M    F  # name
  300M 4 01 folder 01
  435M 6 02 folder 02
  690M 11 03 folder 03
  780M 13 04 folder 04
  1.6G 16 05 folder 05
 .....
 15 13 folder 13
  1 5.7G    .

【问题讨论】:

  • “有什么方法可以像这样在每一列上显示名称吗?”是的,使用echo
  • 显示一些代码,而不仅仅是你已经放在那里的一行代码。
  • 我唯一的代码是 du -a -h |剪切-d/ -f2 |排序 | uniq -c

标签: linux bash unix uniq du


【解决方案1】:

这个怎么样?

echo -e "Size\tFiles\tDirectory"; paste <(du -sh ./*/ | sort -k2 | cut -f1) <(find ./*/ | cut -d/ -f2 | uniq -c | sort -k2 | awk '{print ($1-1)"\t"$2}') | sort -nk2

样本输出:

Size    Files   Directory
172M    36      callrecords
17M     747     manual
83M     2251    input
7.5G    16867   output

说明:

添加标题:

echo -e "Size\tFiles\tDirectory";

Paste 获取 2 个文件,并排输出。所以我们将两个命令的输出粘贴在一起。第一个是这样的:

<(du -sh ./*/ | sort -k2 | cut -f1)

它只是查找当前文件夹的子文件夹的大小,总结里面的所有内容。然后根据文件/文件夹的名称对其进行排序,然后取第一列。这为我们提供了当前文件夹的子文件夹大小列表,按名称排序。

第二个命令是这样的:

<(find ./*/ | cut -d/ -f2 | uniq -c | sort -k2 | awk '{print ($1-1)"\t"$2}')

这类似于您的原始命令 - 它查找当前目录下的文件夹,截断名称以仅包含第一个子级别,然后对它们进行计数以提供当前文件夹的子文件夹列表以及文件数每个内。然后按文件夹名称排序,awk 命令格式化结果,并从每个文件夹的文件计数中减去 1(因为包含文件夹本身)。然后我们可以将结果粘贴在一起以获得(几乎)最终输出。

最后,我们在 paste 命令的输出中使用 sort -nk2 来按第二个字段的数字排序 - 即文件数。

【讨论】:

  • 是的!这基本上就是我想要的!非常感谢,对解释也很有帮助!!
猜你喜欢
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多