We *_*org 1 command-line bash 12.04 14.04
有什么ls我可以用它来显示文件大小为目录参数以及。
当我这样做时ls -s,它会显示我block-size(始终为 4k)而不是目录大小。
谢谢!!!
编辑 - 部分成就
正如@Arronical 所说,Commanddu -sh *显示文件和目录及其大小。我正在寻找的一个小改进是以不同的颜色显示目录,如ls节目。有任何想法吗。谢谢你。:-)
我不知道ls可以实现此目的的命令的任何参数,但是可以使用该du命令在当前工作目录中找到目录和文件的大小。
尝试使用:
du -sh ./*
Run Code Online (Sandbox Code Playgroud)
应该可以创建一个函数或脚本,为您提供有关显示信息的文件或目录的信息。
正如穆鲁指出的那样,参数为 1的-dor--max-depth选项对于仅列出目录很有用。它还可以解决隐藏目录未通过正常 shell globbing(./*部分)列出的事实。
基本思路
人们可以用 find 来模拟ls -l。例如,就像将针对找到的每个目录和文件find运行的命令一样:du
find . -maxdepth 1 ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
示例输出(附注,此处我-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
Run Code Online (Sandbox Code Playgroud)
注意:find有-ls标志,我在这里没有使用它,原因与OP所述相同 - 它显示规范的4096字节
简化
这个命令本身可以变成一个别名,比如ls2一个函数,然后它也可以接受$1参数。例如,这是我放入 my 中的内容.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
}
Run Code Online (Sandbox Code Playgroud)
样本运行:
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
Run Code Online (Sandbox Code Playgroud)
输出组织
没有办法在 中对输出进行原生着色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
}
Run Code Online (Sandbox Code Playgroud)
和示例输出:
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
Run Code Online (Sandbox Code Playgroud)
输出有时可能非常长,因此我建议将此函数与less分页实用程序结合使用。像这样通过管道输出lscwd2 | less
关于 ls 和 stat
为什么人们总是建议du?izx 在他简短而精彩的回答中解释得比我更好,但简而言之,在Unix 和 Linux 上一切都是文件,而在现实目录中是一个文件,其中包含链接到它的文件列表。因此,stat给出该特殊文件的大小ls,而不是链接到该目录的所有文件的总数。但这才是拯救世界的关键。请注意中的描述:duman du
对目录递归地总结每个文件的磁盘使用情况。
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/
Run Code Online (Sandbox Code Playgroud)