在目录列表中显示文件大小的总和

在目录列表中显示文件大小的总和

Windowsdir目录列表命令末尾有一行显示列出的文件占用的空间总量。例如,dir *.exe显示.exe当前目录中的所有文件、它们的大小以及它们的大小总和。我希望dir在 bash 中具有与我的别名类似的功能,但我不确定具体如何去做。

目前,我alias dir='ls -FaGl'在我的.bash_profile, 显示

drwxr-x---+  24 mattdmo  4096 Mar 14 16:35 ./
drwxr-x--x. 256 root    12288 Apr  8 21:29 ../
-rw-------    1 mattdmo 13795 Apr  4 17:52 .bash_history
-rw-r--r--    1 mattdmo    18 May 10  2012 .bash_logout
-rw-r--r--    1 mattdmo   395 Dec  9 17:33 .bash_profile
-rw-r--r--    1 mattdmo   176 May 10  2012 .bash_profile~
-rw-r--r--    1 mattdmo   411 Dec  9 17:33 .bashrc
-rw-r--r--    1 mattdmo   124 May 10  2012 .bashrc~
drwx------    2 mattdmo  4096 Mar 24 20:03 bin/
drwxrwxr-x    2 mattdmo  4096 Mar 11 16:29 download/

例如。答案来自这个问题:

dir | awk '{ total += $4 }; END { print total }'

这给了我总数,但不打印目录列表本身。有没有一种方法可以将其更改为单行或 shell 脚本,以便我可以传递ls我想要的任何参数dir并获得完整的列表和总和?例如,我想运行dir -R *.jpg *.tif以获取所有子目录中这些文件类型的列表和总大小。理想情况下,如果我能够获取每个子目录的大小,那就太好了,但这不是必需的。

答案1

已经有一个 UNIX 命令可以实现此目的:du

做就是了:

du -bch 

根据约定,您可以在命令末尾添加一个或多个文件或目录路径。-h是一个将大小转换为人类友好格式的扩展,-b为您提供文件大小而不是磁盘使用情况,并-c在最后给出总计。

答案2

您可以使用du -h -c directory|tail -1

这将生成一行包含内存使用情况的信息。

答案3

以下函数可以满足您的大部分要求:

dir () { ls -FaGl "${@}" | awk '{ total += $4; print }; END { print total }'; }

...但它不会给你你所要求的东西dir -R *.jpg *.tif,因为这不是ls -R工作原理。你可能想玩一下find对此的实用性。

答案4

只需打印您要求和的当前行:

dir | awk '{ print; total += $4 }; END { print "total size: ",total }'

相关内容