coreutils ls 总结

coreutils ls 总结

为什么 coreutils 命令中没有ls像 MS-DOS/Windows 那样的摘要选项?

对于摘要选项,我的意思是:
计算文件目录并总结他们的尺寸

更新:

其内容应为:“甚至DOS/Windows 有一个。”

它是:

command.com  vs.  sh
cmd.exe      vs.  bash

后者有明确的要点。

但出于某种原因,这就是问题所在,Linux/Unix 已经没有总结在目录列表中。

而不是解决这个问题,而是声明这是正确的,是正确的事情,并且“干得好”......只有在那之后,线程才会爆发出通过脚本来修复这个空缺的解决方案!

在我看来,这是一个很好的例子XY问题

  • 用户想做 X。
  • 用户不知道如何做 X,但认为如果他们能够设法做 Y,他们就可以摸索找到解决方案。
  • 用户也不知道如何做 Y。
  • 用户请求有关 Y 的帮助。
  • 其他人尝试帮助用户解决 Y 问题,但感到困惑,因为 Y 似乎是一个需要解决的奇怪问题。
  • 经过大量交互和浪费时间后,最终清楚用户确实需要 X 方面的帮助,而 Y 是一个死胡同。

想象一下以下情况:

你坐在餐厅里,服务员送来账单。他列出了所有菜品,却没有总结!你必须自己做——他已经“做得很好”了。

或者他没有?


结束语

当然知道我 - 并且喜欢 -UNIX工具包。但基本功能应该由工具本身提供。在正确的位置添加几个数字,尤其是在如此急需的情况下,这根本不是问题。我认为没有理由不这样做。


结论

我现在的理解是:POSIX

POSIX标准没有提及摘要。就是这样。

它是刻在石头上的。

人们根本不去想X。他们是用过的去处理

然而,令人惊讶的是,我们完全忽视了这种情况的可能性。

答案1

但基本功能应该由工具本身提供。

这是对的。 UNIX/Linux 的哲学是拥有只做一件事的命令/工具,并且把那件事做得非常好。然后,一个命令的标准输出通过管道馈送到另一个命令的标准输入,以产生复杂的结果。

从其联机帮助页来看,该命令的目的ls是“列出有关文件的信息”。它能够生成包含或排除模式的列表,按不同标准排序,显示不同信息等,但仅此而已。计算一组文件的总大小不是ls的职责。事实上,正是如此du。该du命令(同样来自其联机帮助页)是一个“总结文件集的磁盘使用情况”的工具。

所以,这可能不是您正在寻找的答案,但是ls行为如下由 UNIX 设计。我可能会补充说,这种设计几十年来已被证明是有效的。

另一方面,正如我所注意到的,Windows 的哲学是不同的。在我看来,它的目标是为用户提供一些通用工具,可以完成所有事情,也许是为了不让(没有经验的)用户学习太多命令。

答案2

du是总结文件和目录使用情况的强大命令。看https://superuser.com/questions/162749/how-to-get-the-summarized-sizes-of-directories-and-their-subdirectories

例如du -sh *查看每个文件夹的大小。添加该-c选项du -csh *会在最后给出总计。

可以通过将 ls 输出通过管道传输到 来找到文件计数wc,如下所示ls | wc -l

无论您想做什么,我相信 Linux 中都有办法。它可能与您在 DOS/Windows 中习惯的不同,但一般来说 Linux 在您可以实现的功能方面要灵活得多。

答案3

嗯,有一个 unix/linux 实用程序可以生成输出相似的dir输出DOS(我正在使用镜头此页面作为参考因为我现在无法访问 Windows 机器):

tree

它可以列出当前目录的内容以及摘要类似于DOS使用以下开关:

-i -- 不打印缩进线
-L 1 -- 将深度级别设置为 1
--du -- 将每个目录大小报告为其所有文件和子目录(及其文件等,只要不被拒绝)大小的累积通过 ) 下降到相应的子目录中-L。最终报告中还给出了已用空间的总量。
--timefmt '%D %T' -- 根据格式字符串打印并格式化日期%D %T

所以运行例如

tree -i -L 1 --du --timefmt '%D %T'

印刷

[    8499420 12/05/22 21:38:20]  .
[    2028626 12/28/21 13:24:00]  02.jpg
[    4907520 11/08/22 01:54:10]  03.JPG
[       4096 12/05/22 17:38:54]  05-dir
[     465991 11/01/22 21:46:33]  08.jpg
[     418149 11/01/22 21:46:33]  09.jpg
[       4096 11/28/22 20:42:09]  11-dir
[     583732 10/16/22 21:34:43]  16.png
[      83114 02/20/22 23:01:49]  19.jpg

     8499420 bytes used in 2 directories, 6 files

现在...有一些区别:

首先,据我所知,没有办法<DIR>在没有后处理的情况下打印目录...不过,如果设置了环境变量并且输出为; ,tree那么目录将具有不同的颜色;无论哪种方式,都可以使用不同的颜色,例如,这就是我的设置中的样子(这次以人类可读的格式添加到打印尺寸):LS_COLORSttyTREE_COLORS-h

TREE_COLORS="di=1;32" tree -i -L 1 --du --timefmt '%D %T' -h

在此输入图像描述

请注意,还有-F与使用时相同的功能,ls例如,它附加一个 /用于目录,一个=用于套接字文件,一个*用于可执行文件等等(有关此内容和其他内容的详细信息,例如对文件进行排序的各种方式,请参阅手册,显示隐藏文件等)

其次,tree以不同的顺序打印列:首先是大小,然后是日期,然后是文件名。同样,如果没有后处理,就无法更改列的顺序。从 v.1.7 开始,tree可以输出 JSON - 您可以将该 JSON 输出通过管道传输到例如jq并重新排列所有内容,使其与 DOS 对应部分几乎相同,但这超出了本文的范围,即“工具本身提供的基本功能”

相关内容