如何根据文件大小知道哪个文件是中位数

如何根据文件大小知道哪个文件是中位数

有 99 个大小不同的文件夹。我想知道这些文件夹中哪一个是大小的中间值,以及如何在找到该文件夹​​时打印其名称?

答案1

假设:

  • 标题说你想要中等大小的文件,正文也暗示你想要中等大小的目录。我假设你的意思是目录。
  • 目录恰好只有一层深度 - 也就是说,您有目录abc,但没有a/x
  • 如果多个目录具有相同的大小,则您对其中任何一个结果都感到满意。
  • 正好有 99 个目录。

如果任何这些假设不正确,请说出来,我会尝试更新答案。

该命令du将告诉您每个目录中所有内容的大小,并打印每个目录的大小和名称。这将为您提供 100 行:99 个目录和父目录的一行。

该命令sort -g可以按照第一个字段的数字顺序(即大小)对结果进行排序。99 个结果的中位数现在位于第 50 行。

该命令tail可以选择第50行。

因此,将这些结合起来:

cd ~/wherever/
du | sort -g | tail -n +50

答案2

首先获取您要计数的内容的列表并计算行数。以下内容适用于目录和文件(将 $* 替换为您想要计数的内容):

    du -s $* |厕所

您说在您的例子中这个数字是 99。除以 2 并加 1 即可得到中位文件/文件夹的顺序号。在您的例子中这个数字是 50。

现在提取包含中等大小文件/文件夹的行:

    du -s $* | 排序 -n | 尾部 -n +50 | 头部 -1

(请注意,“du -s”不包括两次添加的文件或目录,例如“du -s /etc /etc/passwd”仅返回 /etc 的摘要)

相关内容