如何在Bash中列出每个文件和目录的大小(递归)并按大小排序?

Kit*_* Ho 103 linux bash file

我发现Bash中的目录大小并不容易.

我希望当我输入时ls -<some options>,它可以递归地列出目录文件大小的所有总和,同时按文件顺序排序.

那可能吗?

Dev*_*per 208

只需导航到目录并运行以下命令:

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

或者为人类可读的大小添加-h,并且-r首先打印更大的目录/文件.

du -a -h --max-depth=1 | sort -hr
Run Code Online (Sandbox Code Playgroud)

  • `du -h`也需要`sort -h`,以确保在`1.3G'之前说'981M`排序; 使用`sort -n`只会考虑数字而且它们的轮数是错误的. (22认同)
  • `sort -h`仅适用于GNU的版本/ Linux,对BSD/OS X没有好运. (6认同)

seh*_*ehe 18

du -s -- * | sort -n
Run Code Online (Sandbox Code Playgroud)

(这不会显示隐藏的(.dotfiles)文件)

使用du -sm甲基溴单位等我总是用

du -smc -- * | sort -n
Run Code Online (Sandbox Code Playgroud)

因为-c明显的原因,总行()将最终在底部:)

PS:

  • 请参阅有关处理dotfiles的注释
  • 我经常使用例如'du -smc/home// | sort -n | tail'来了解大位所在的位置

  • `du --max-depth = 1 | sort -n`或`find.-mindepth 1 -maxdepth 1 | xargs du -s | sort -n`也包括dotfiles. (4认同)

cev*_*ris 17

显然,--max-depth选项不在Mac OS X的du命令版本中.您可以使用以下代码.

du -h -d 1 | sort -n


Mar*_*oma 13

命令

du -h --max-depth=0 * | sort -hr
Run Code Online (Sandbox Code Playgroud)

产量

3,5M    asdf.6000.gz
3,4M    asdf.4000.gz
3,2M    asdf.2000.gz
2,5M    xyz.PT.gz
136K    xyz.6000.gz
116K    xyz.6000p.gz
88K test.4000.gz
76K test.4000p.gz
44K test.2000.gz
8,0K    desc.common.tcl
8,0K    wer.2000p.gz
8,0K    wer.2000.gz
4,0K    ttree.3
Run Code Online (Sandbox Code Playgroud)

说明

  • du 显示"磁盘使用情况"
  • h 是为了"人类可读"(在排序和在du中)
  • max-depth=0表示du不会显示子文件夹的大小(如果要显示每个子文件,子文章,...,文件夹中的每个文件的所有大小,请删除它)
  • r 用于"反向"(最大文件优先)

ncdu

当我提出这个问题时,我想清理我的文件系统.命令行工具ncdu更适合此任务.

在Ubuntu上安装:

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

用法:

只需输入ncdu [path]命令行即可.在分析路径几秒钟后,您将看到如下内容:

$ ncdu 1.11 ~ Use the arrow keys to navigate, press ? for help
--- / ---------------------------------------------------------
.  96,1 GiB [##########] /home
.  17,7 GiB [#         ] /usr
.   4,5 GiB [          ] /var
    1,1 GiB [          ] /lib
  732,1 MiB [          ] /opt
. 275,6 MiB [          ] /boot
  198,0 MiB [          ] /storage
. 153,5 MiB [          ] /run
.  16,6 MiB [          ] /etc
   13,5 MiB [          ] /bin
   11,3 MiB [          ] /sbin
.   8,8 MiB [          ] /tmp
.   2,2 MiB [          ] /dev
!  16,0 KiB [          ] /lost+found
    8,0 KiB [          ] /media
    8,0 KiB [          ] /snap
    4,0 KiB [          ] /lib64
e   4,0 KiB [          ] /srv
!   4,0 KiB [          ] /root
e   4,0 KiB [          ] /mnt
e   4,0 KiB [          ] /cdrom
.   0,0   B [          ] /proc
.   0,0   B [          ] /sys
@   0,0   B [          ]  initrd.img.old
@   0,0   B [          ]  initrd.img
@   0,0   B [          ]  vmlinuz.old
@   0,0   B [          ]  vmlinuz
Run Code Online (Sandbox Code Playgroud)

删除当前突出显示的元素d,用CTRL+ 退出c


Tha*_*tos 5

ls -S按大小排序。然后,为了显示大小,ls -lS给出一个长 ( -l),按大小排序 ( -S) 显示。我通常-h也会添加,以使内容更易于阅读,因此,ls -lhS.