有什么ls
我可以用它来显示文件大小为目录参数以及。
当我这样做时ls -s
,它显示的是我block-size
(始终为4k)而不是目录大小。
谢谢!!!
编辑-部分成就
正如@Arronical所说,Command会du -sh *
显示文件和目录及其大小。我正在寻找的一个小增强功能是以不同的颜色显示目录,例如ls
显示。有任何想法吗。谢谢你。:-)
基本思路
可以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
意味着它是一个普通文件,和领先d
的drwxr-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
人们为什么总是建议du
?izx在简短而出色的回答中更好地解释了我,但总而言之,在Unix和Linux上,所有内容都是一个文件,而在现实目录中,则是一个包含与其链接的文件列表的文件。因此,stat
并ls
给予特殊文件的大小,并非所有链接到目录中的文件的总量。但这du
就是节省时间的原因。注意其中的描述man du
:
递归地汇总目录的每个FILE的磁盘使用情况。
du
实用程序会跳入每个目录,并在此汇总每个文件的文件大小。ls
与stat
做什么和做事的方式不同。
因此,每个实用程序的目的是非常不同的。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] 删除。
我来说两句