如何使`du`只在其输出中包含常规文件?

Shu*_*eng 3 shell bash terminal disk-usage files

我想列出的基于磁盘的使用情况降序排列的所有文件,并从获得以下命令

要列出当前目录中前 10 个最大的文件: du . | sort -nr | head -n10

列出当前目录中最大的目录: du -s * | sort -nr | head -n10

但是,它们都只列出目录。

如何du在其输出中仅包含常规文件?

奖金:

以下du选项用于什么(似乎没有效果)?:

 -a, --all             write counts for all files, not just directories 
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 5

如果您有 GNU du,则使用find(或在 zsh 中使用 shell glob 作为参数)向它发送常规文件(或目录,或任何您想过滤的内容)的列表:

find . -type f -print0 | du --files0-from=-
du *(.)  # zsh, regular non-hidden files in the current directory
Run Code Online (Sandbox Code Playgroud)

du默认情况下,只打印该目录的目录内文件大小的总和,但您也可以让它打印这些单独的文件大小,这就是-a

% du /usr/bin
68  /usr/bin/lou_maketable.d
100 /usr/bin/vendor_perl
464 /usr/bin/core_perl
4   /usr/bin/site_perl
1104024 /usr/bin
% du /usr/bin -a | head
4   /usr/bin/preparetips5
36  /usr/bin/autoupdate
4   /usr/bin/python3.9-config
0   /usr/bin/mkoctfile
60  /usr/bin/zdump
16  /usr/bin/fstopgm
4   /usr/bin/brltty-setcaps
40  /usr/bin/sleep
8   /usr/bin/pnmquantall
20  /usr/bin/extract_mpeg2
Run Code Online (Sandbox Code Playgroud)

  • @Shuzheng `/usr/bin`(或`/bin`)中的子目录并不常见,但有些包使用它们(例如perl)。此外,[标准`du`](https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/utilities/du.html) _"默认情况下,...应将文件空间的大小写入标准输出分配给以每个指定文件为根的文件层次结构的每个子目录以及分配给每个子目录的文件空间大小。不是别名或函数)。 (2认同)