有 99 个大小不同的文件夹。我想知道这些文件夹中哪一个是大小的中间值,以及如何在找到该文件夹时打印其名称?
答案1
假设:
- 标题说你想要中等大小的文件,正文也暗示你想要中等大小的目录。我假设你的意思是目录。
- 目录恰好只有一层深度 - 也就是说,您有目录
a
、b
等c
,但没有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 的摘要)