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 }'