使用ls列出目录及其总大小

kmo*_*511 779 unix linux

是否有可能ls在Unix中使用列出子目录及其所有内容的总大小,而不是通常的4K(我假设)只是目录文件本身?IE

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk
Run Code Online (Sandbox Code Playgroud)

在搜索了这些手册页后,我空洞地说.

mol*_*olf 1457

尝试类似的东西:

du -sh *
Run Code Online (Sandbox Code Playgroud)

简短版本:

du --summarize --human-readable *
Run Code Online (Sandbox Code Playgroud)

说明:

du:D isk U sage

-s:显示每个指定文件的摘要.(相当于-d 0)

-h:"人类可读"输出.使用单位后缀:B yte,K ibibyte(KiB),M ebibyte(MiB),G ibibyte(GiB),T ebibyte(TiB)和P ebibyte(PiB).(BASE2)

  • 另外-c(产生总计)很不错. (48认同)
  • du --max-depth 1仅显示树中1深的文件/文件夹大小,不再杂乱,并且容易在文件夹中找到大文件夹. (44认同)
  • +1 ... du用于任务,ls不是. (27认同)
  • 为了清楚地了解空间的位置,`du -sch*.[!.]*| sort -rh`很棒(显示排序的输出)在mac上执行:`brew install coreutils`然后`du -sch*.[!.]*| gsort -rh` (18认同)
  • 如何包含隐藏文件? (11认同)
  • zsh中的@Zak你可以使用`*(D)`来匹配隐藏的(**d**ot)文件和普通文件.使用bash时,可以使用`*.[!.]*`来匹配两者. (5认同)
  • 它是OSX上的`du -h -d 1` (2认同)
  • 所有这些答案都提到了杜。但结果可能是错误的。磁盘使用总和与每个文件大小的总和不同。如果我在一个目录中有 100 个 1 字节的文件,则 du -hs <dirname> 显示 400k,而不是 100 字节......(只是在 linux 上尝试过) (2认同)

小智 306

du -sk * | sort -n将按大小对文件夹进行排序.想要清理空间有帮助..

  • `sort -rn`以反向数字顺序对事物进行排序.`sort -rn | head -n 10`将只显示前几个,如果有兴趣的话. (65认同)
  • `sort -rh`可以很好地与`du -cksh*`一起使用,因为它可以对人类可读单元进行排序. (13认同)
  • 附加一个`| tail -r`按最大排序先排序. (10认同)
  • 为什么需要 -k ?在文档中它说: -k 就像 --block-size=1K ,这会影响精度吗? (2认同)

小智 100

du -sh * | sort -h
Run Code Online (Sandbox Code Playgroud)

这将以人类可读的格式显示.

  • 效果很好,一个小的补充`du -sh*| sort -rh`(-r首先列出更大的文件夹) (9认同)
  • 更多关于`sort -h`的信息:http://www.gnu.org/software/coreutils/manual/coreutils.html#sort-invocation特别适用于排序`103K`,'102M`,`1.1G`等这应该可以在很多系统上使用,但不是全部. (6认同)
  • 包含隐藏文件/目录;`du -sh $(ls -A) | 'du -sh $(ls -A) | 排序-h` (2认同)

Jay*_*kra 50

以人类可读格式列出当前目录中的最大目录:

du -sh * | sort -hr

限制行数的更好方法是

du -sh * | sort -hr | head -n10

在哪里可以增加-nflag 的后缀以限制列出的行数

样品:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md
Run Code Online (Sandbox Code Playgroud)

它使阅读更方便:)


Seb*_*ebi 25

要以ls -lh格式显示,请使用:

(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'
Run Code Online (Sandbox Code Playgroud)

awk代码解释说:

if($1 == "total") { // Set X when start of ls is detected
  X = 1 
} else if (!X) { // Until X is set, collect the sizes from `du`
  SIZES[$2] = $1
} else {
  // Replace the size on current current line (with alignment)
  sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); 
  print $0
}
Run Code Online (Sandbox Code Playgroud)

样本输出:

drwxr-xr-x 2 root     root 4.0K    Feb 12 16:43 cgi-bin
drwxrws--- 6 root     www  20M     Feb 18 11:07 document_root
drwxr-xr-x 3 root     root 1.3M    Feb 18 00:18 icons
drwxrwsr-x 2 localusr www  8.0K    Dec 27 01:23 passwd
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法保持使用这个答案的颜色? (2认同)

Kei*_*ith 20

你想要的命令是'du -sk'du ="磁盘使用"

-k标志为您提供以千字节为单位的输出,而不是磁盘扇区的du默认值(512字节块).

-s标志仅列出顶级目录中的内容(即默认情况下的当前目录或命令行中指定的目录).在这方面,du具有相反的ls行为,这很奇怪.默认情况下,du将递归地为您提供每个子目录的磁盘使用情况.相反,ls只会在指定目录中提供列表文件.(ls -R为您提供递归行为.)


joh*_*ood 18

目录中文件夹和文件的有序 列表(按大小排列):

du -skh * | sort -hr
Run Code Online (Sandbox Code Playgroud)

包括隐藏文件:

du -skh .??* * | sort -hr
Run Code Online (Sandbox Code Playgroud)

解释:

该命令du估计磁盘使用情况。

  • -s摘要,如,不是递归的,只有此级别的文件/文件夹。
  • -kh人类可读的,如 GB、MB、KB 等......
  • .??*以点开头且.长度为 3 个或更多字符的名称(不包括...链接)。
  • *.所有不以.开头的文件/文件夹

du默认情况下首先显示较小的尺寸。我们将其称为两组文件(隐藏文件和普通文件),因此我们需要将sort结果再次组合。

  • -h考虑人类可读字符(人类数字,如 GB、MB 等)重新排序。
  • -r颠倒顺序。

笔记。其他答案包含大部分这些选项,但分散在不同的选项中,这里没有探索如何轻松包含隐藏文件/文件夹。


Kus*_*nda 13

将此shell函数声明放在shell初始化脚本中:

function duls {
    paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}
Run Code Online (Sandbox Code Playgroud)

我调用它duls是因为它显示了两者的输出duls(按此顺序):

$ duls
210M    drwxr-xr-x  21 kk  staff  714 Jun 15 09:32 .

$ duls *
 36K    -rw-r--r--   1 kk  staff    35147 Jun  9 16:03 COPYING
8.0K    -rw-r--r--   1 kk  staff     6962 Jun  9 16:03 INSTALL
 28K    -rw-r--r--   1 kk  staff    24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--   1 kk  staff       75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--   1 kk  staff    24473 Jun 10 13:26 Makefile.in
4.0K    -rw-r--r--   1 kk  staff     1689 Jun  9 16:03 README
120K    -rw-r--r--   1 kk  staff   121585 Jun 10 13:26 aclocal.m4
684K    drwxr-xr-x   7 kk  staff      238 Jun 10 13:26 autom4te.cache
128K    drwxr-xr-x   8 kk  staff      272 Jun  9 16:03 build
 60K    -rw-r--r--   1 kk  staff    60083 Jun 10 13:26 config.log
 36K    -rwxr-xr-x   1 kk  staff    34716 Jun 10 13:26 config.status
264K    -rwxr-xr-x   1 kk  staff   266637 Jun 10 13:26 configure
8.0K    -rw-r--r--   1 kk  staff     4280 Jun 10 13:25 configure.ac
7.0M    drwxr-xr-x   8 kk  staff      272 Jun 10 13:26 doc
2.3M    drwxr-xr-x  28 kk  staff      952 Jun 10 13:26 examples
6.2M    -rw-r--r--   1 kk  staff  6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
 11M    drwxr-xr-x  42 kk  staff     1428 Jun 10 13:26 src

$ duls doc
7.0M    drwxr-xr-x  8 kk  staff  272 Jun 10 13:26 doc

$ duls [bM]*
 28K    -rw-r--r--  1 kk  staff  24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--  1 kk  staff     75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--  1 kk  staff  24473 Jun 10 13:26 Makefile.in
128K    drwxr-xr-x  8 kk  staff    272 Jun  9 16:03 build
Run Code Online (Sandbox Code Playgroud)

说明:

paste实用程序根据您提供的规范从其输入创建列.给定两个输入文件,它将它们并排放置,并使用制表符作为分隔符.

我们给它输出du -hs -- "$@" | cut -f1第一个文件(真正的输入流)和ls -ld -- "$@"第二个文件的输出.

在函数中,"$@"将评估所有命令行参数的列表,每个参数都用双引号括起来.因此,它将理解带有空格等的通配字符和路径名.

double minuses(--)表示命令行选项的结尾为duls.如果没有这些,他说duls -l会混淆du任何选项duls没有会混淆ls(即同时存在于公用事业和选项可能并不意味着同样的事情,这将是一个非常混乱).

cutdu简单地削减了的第一列du -hs输出(尺寸).

我决定将du输出放在左边,否则我将不得不管理一个不稳定的右列(由于文件名的长度不同).

该命令不接受命令行标志.

这已经在两者bash和两者中进行了测试ksh93.它无法使用/bin/sh.


小智 7

我总是使用du -sk(-k标志显示文件大小,以千字节为单位).

  • 这应该是一个评论,为@molf更正确和更好解释的接受答案提供额外的信息.它本身不应该被认为是一个答案 (4认同)

Sta*_*ust 7

du -h --max-depth=1 . | sort -n -r
Run Code Online (Sandbox Code Playgroud)

  • du -h -d 1 最大深度为 1。简写形式。 (2认同)

mef*_*ect 5

这是我喜欢的

更新:我不喜欢上一个,因为它没有显示当前目录中的文件,它只列出目录。

/varubuntu 上的示例输出:

sudo du -hDaxd1 /var | sort -h | tail -n10

4.0K    /var/lock
4.0K    /var/run
4.0K    /var/www
12K     /var/spool
3.7M    /var/backups
33M     /var/log
45M     /var/webmin
231M    /var/cache
1.4G    /var/lib
1.7G    /var
Run Code Online (Sandbox Code Playgroud)


Cir*_*四事件 5

ncdu 诅咒 du

这个很棒的CLI实用程序使您可以轻松地以交互方式查找大文件和目录。

例如,在一个知名项目的树中,我们执行以下操作:

sudo apt-get install ncdu
ncdu
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此处输入图片说明

然后,我在键盘上向下和向右输入以进入该/drivers文件夹,然后看到:

在此处输入图片说明

ncdu 在启动时只为整个树递归计算一次文件大小,因此效率很高。

“磁盘总使用量”与“表观大小”的比较类似于du,我在下面进行了解释:为什么“ du”的输出通常与“ du -b”有很大不同?

项目主页:https//dev.yorhel.nl/ncdu

相关问题:

在Ubuntu 16.04中测试。

ncdu 非互动用法

的另一个很酷的功能ncdu是,您可以先以JSON格式转储大小,然后再使用它们。

例如,要生成文件,请运行:

ncdu -o ncdu.json
Run Code Online (Sandbox Code Playgroud)

然后通过以下方式进行交互检查:

ncdu -f ncdu.json
Run Code Online (Sandbox Code Playgroud)

如果您要处理非常大而缓慢的文件系统(例如NFS),这将非常有用。

这样,您可以首先仅导出一次,这可能需要几个小时,然后浏览文件,退出,再次浏览等。

输出格式只是JSON,因此也很容易在其他程序中重用它,例如:

ncdu -o -  | python -m json.tool | less
Run Code Online (Sandbox Code Playgroud)

揭示了一个简单的目录树数据结构:

[
    1,
    0,
    {
        "progname": "ncdu",
        "progver": "1.12",
        "timestamp": 1562151680
    },
    [
        {
            "asize": 4096,
            "dev": 2065,
            "dsize": 4096,
            "ino": 9838037,
            "name": "/work/linux-kernel-module-cheat/submodules/linux"
        },
        {
            "asize": 1513,
            "dsize": 4096,
            "ino": 9856660,
            "name": "Kbuild"
        },
        [
            {
                "asize": 4096,
                "dsize": 4096,
                "ino": 10101519,
                "name": "net"
            },
            [
                {
                    "asize": 4096,
                    "dsize": 4096,
                    "ino": 11417591,
                    "name": "l2tp"
                },
                {
                    "asize": 48173,
                    "dsize": 49152,
                    "ino": 11418744,
                    "name": "l2tp_core.c"
                },
Run Code Online (Sandbox Code Playgroud)

在Ubuntu 18.04中测试。