命令“ ls”显示目录大小而不是块大小

我们是博格

有什么ls我可以用它来显示文件大小为目录参数以及

当我这样做时ls -s,它显示的是我block-size(始终为4k)而不是目录大小。

谢谢!!!

编辑-部分成就

正如@Arronical所说,Command会du -sh *显示文件和目录及其大小。我正在寻找的一个小增强功能是以不同的颜色显示目录,例如ls显示。有任何想法吗。谢谢你。:-)

塞尔吉(Sergiy Kolodyazhnyy)

基本思路

可以ls -l用find模仿例如,对于find将在du找到的每个目录和文件中运行的命令而言,例如

find . -maxdepth 1  ! -name "."   -printf "%M %u %g "  -exec du -sh  {} \; 2> /dev/null 

输出示例(旁注,这里我-type d仅用于演示目录列表;不带此命令-type d将列出所有文件和目录):

DIR:/xieerqi
skolodya@ubuntu:$ find . -maxdepth 1 -type d ! -name "."   -printf "%M %u %g "  -exec du -sh  {} \; 2> /dev/null | head      
drwxrwxr-x xieerqi xieerqi 348K ./addRemoveDistribution
drwxr-xr-x xieerqi xieerqi 2.2G ./Downloads
drwxrwxr-x xieerqi xieerqi 4.0K ./.screenlayout
drwxr-xr-x xieerqi xieerqi 4.0K ./Public
drwxrwxr-x xieerqi xieerqi 28K  ./Youku Files
drwxrwxr-x xieerqi xieerqi 142M ./.minecraft
drwx------ xieerqi xieerqi 20K  ./.gnupg
drwxrwxr-x xieerqi xieerqi 2.5G ./.Genymobile
drwxrwxr-x xieerqi xieerqi 73M  ./genymotion
drwxrwxr-x xieerqi xieerqi 104K ./scripts

注意find具有-ls标志,出于与OP所述原因相同,我在这里使用它-它显示规范的4096字节

简化版

该命令本身可以转换为别名,例如ls2或函数,然后也可以使用$1参数。例如,以下是我放入的内容.bashrc及其工作方式:

function lscwd
{
 # Function to stat files and folders in current dir
 # Takes first argument as directory to stat
 # If no directory supplied, current dir assumed
 if [ -z "$1" ];then
   DIR="."
 else
   DIR="$1"
 fi

 find "$DIR"  -maxdepth 1 ! -name "."   -printf "%M %u %g "  -exec du -sh  {} \; 2> /dev/null 

}

样品运行:

DIR:/xieerqi
skolodya@ubuntu:$ lsc
lscpu lscwd 
skolodya@ubuntu:$ lscwd | head                                                                                               
drwxrwxr-x xieerqi xieerqi 348K ./addRemoveDistribution
drwxr-xr-x xieerqi xieerqi 2.2G ./Downloads
drwxrwxr-x xieerqi xieerqi 4.0K ./.screenlayout
drwxr-xr-x xieerqi xieerqi 4.0K ./Public
drwxrwxr-x xieerqi xieerqi 28K  ./Youku Files
drwxrwxr-x xieerqi xieerqi 142M ./.minecraft
drwx------ xieerqi xieerqi 20K  ./.gnupg
drwxrwxr-x xieerqi xieerqi 2.5G ./.Genymobile
drwxrwxr-x xieerqi xieerqi 73M  ./genymotion
drwxrwxr-x xieerqi xieerqi 104K ./scripts

DIR:/xieerqi
skolodya@ubuntu:$ lscwd /etc | head                                                                                          
drwxr-xr-x root root 18M    /etc
drwxr-xr-x root root 68K    /etc/logrotate.d
drwxr-xr-x root root 36K    /etc/apm
drwxr-xr-x root root 96K    /etc/speech-dispatcher
drwxr-xr-x root root 28K    /etc/jwm
drwxr-xr-x root root 8.0K   /etc/hp
drwxr-xr-x root root 8.0K   /etc/gtk-2.0
drwxr-xr-x root root 20K    /etc/gtkmathview
drwxr-xr-x root root 68K    /etc/xml
drwxr-xr-x root root 8.0K   /etc/esound

输出组织

无法通过find专门为解析文件名而专门对输出进行着色ls着色来自输出中包含的特殊字符,我们并不是真正想要的。

但是,可以读取权限。领先--rwxr-xr-x意味着它是一个普通文件,和领先ddrwxr-xr-x手段目录。

find也有方便的-type标志,我们也可以使用它来过滤输出。例如,这是lscwd

function lscwd2
{
 # Function to stat files and folders in current dir
 # Takes first argument as directory to stat
 # If no directory supplied, current dir assumed
 if [ -z "$1" ];then
   DIR="."
 else
   DIR="$1"
 fi

 # print directories first
 printf "*** DIRECTORIES *** \n"
 find "$DIR"  -maxdepth 1 -type d ! -name "."   -printf "%M %u %g "  -exec du -sh  {} \; 2> /dev/null 
 # print non-directories second
 printf "*** FILES *** \n"

 find "$DIR"  -maxdepth 1 ! -type d ! -name "."   -printf "%M %u %g "  -exec du -sh  {} \; 2> /dev/null 
 }

并输出示例:

DIR:/bin
skolodya@ubuntu:$ lscwd2
*** DIRECTORIES *** 
drwxrwxr-x xieerqi xieerqi 4.0K ./c
drwxrwxr-x xieerqi xieerqi 12K  ./python
drwxrwxr-x xieerqi xieerqi 12K  ./perl
drwxrwxr-x xieerqi xieerqi 4.0K ./ANOTHERDIR
drwxrwxr-x xieerqi xieerqi 4.0K ./random
drwxrwxr-x xieerqi xieerqi 108K ./sh
drwxrwxr-x xieerqi xieerqi 38M  ./cs2
drwxr-xr-x xieerqi xieerqi 414M ./arduino-1.6.7
drwxrwxr-x xieerqi xieerqi 24K  ./codereview
*** FILES *** 
-rwxrwxr-x xieerqi xieerqi 4.0K ./preventShutdown.sh
-rw-rw-r-- xieerqi xieerqi 4.0K ./Dimmer.desktop
-rwxrwxr-x xieerqi xieerqi 4.0K ./updateWarning.sh
-rw-rw-r-- xieerqi xieerqi 4.0K ./somefile.txt
-rw-r--r-- xieerqi xieerqi 4.0K ./.bashrc
-rwxr-xr-x xieerqi xieerqi 4.0K ./setup.sh
-rwxrwxr-x xieerqi xieerqi 4.0K ./whiledemo.csh
-rwxr-xr-x xieerqi xieerqi 4.0K ./fmtcode.awk
-rwxrwxr-x xieerqi xieerqi 4.0K ./batmon.sh
-rwxr-xr-x xieerqi xieerqi 4.0K ./Dimmer.sh
-rw-rw-r-- xieerqi xieerqi 4.0K ./somefile2.txt

输出有时可能会很长,所以我建议将此功能与less分页实用程序结合使用像这样通过管道输出lscwd2 | less

关于ls和stat

人们为什么总是建议duizx在简短而出色的回答中更好地解释了我,但总而言之,在Unix和Linux上,所有内容都是一个文件,而在现实目录中,则是一个包含与其链接的文件列表的文件。因此,statls给予特殊文件的大小,并非所有链接到目录中的文件的总量。但这du就是节省时间的原因。注意其中的描述man du

递归地汇总目录的每个FILE的磁盘使用情况。

du实用程序会跳入每个目录,并在此汇总每个文件的文件大小。lsstat什么做事的方式不同

因此,每个实用程序的目的是非常不同的。ls正在完全按照要求执行操作-列出文件大小,并且来自Windows世界,我们将目录的大小理解为这个“袋子”,如果我可以比较的话,它的大小取决于其中的苹果数量。Unix稍有不同,是的,但是很现实。也许它并不能满足用户的需求,但它在实际的,物理的意义上是有意义的。

另外,默认情况下,块大小为4k,但是一旦文件超过4k,文件系统将需要分配更多空间。例如,我的主文件夹的总大小为73GB。那目录的块大小呢?

DIR:/bin
skolodya@ubuntu:$ ls -ld $HOME
drwxr-xr-x 94 xieerqi xieerqi 16384 Jan 22 07:24 /home/xieerqi/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ls命令的动态块大小

命令“ ls -d”未显示目录。有没有办法让“ ls”仅显示目录而不是文件和目录?

是否有窗口的命令行选项来显示目录的大小

“如何使用ls命令显示目录'/ sbin'中以'az'开头的所有文件/目录?”

命令ls | grep仅显示目录(当它还应显示文件时)

ls -ls没有显示目录的真实大小

获取树命令以不显示目录

将ls命令与“路径”一起使用以显示目录内的内容

目录的大小在'ls -l'命令的输出中意味着什么?

为什么使用 ls 命令显示的文件大小不同?

Jenkins命令显示目录中的所有文件?

历史记录命令显示目录和日期

键入命令时是否可以自动显示目录内容?

ls -s命令,什么类型的文件大小

如何使用find命令检查目录大小?

在默认的PowerShell ls命令中显示人类可读的文件大小

显示文件和大小缓慢命令

ping 命令包大小

作为ls命令输出的文件大小的不同度量

从ls命令获取访问权限,文件名及其大小

为什么ls命令没有列出巨大的文件大小?

Laravel命令php artisan服务显示目录不存在

可以将“ cd”的命令完成修改为仅显示目录并忽略文件吗?

未显示目录中文件的 PHP 文件大小

ls命令认为目录是文件

如何使用 SFTP ls 命令显示子目录

检查目录大小是否大于1g的命令

Linux find命令-如何按大小查找目录?

cp命令处理空目录(导致diff文件大小)