如何在 unix 中查找目录内容的大小;不使用 du/awk?

如何在 unix 中查找目录内容的大小;不使用 du/awk?

如何在 unix 中查找目录内容的大小;

不使用 du /awk?

您可以使用 ls -l | < 仅限命令集 >

答案1

您可以使用[https://unix.stackexchange.com/a/238256/10525]

哪一个

sudo ls -1d */ | sudo xargs -I{} du {} -sh && sudo du -sh

这实际上并不是您想要的,但是由于您没有说明为什么您不想使用正确的工具来完成工作,所以我不知道您将如何得到合适的答案。

答案2

由于要求不使用 awk,我们可以使用Perl 单行命令

ls -l | perl -lane 'print $F[4]'

在哪里:

−l enables automatic line ending processing.
−a turns on automatic splitting of each input record into fields, stored
   in @F array.
−n includes an implicit input-reading loop. lines are not printed.
−e may be used to enter a single line of script. multiple −e commands
   build up a multiline script.`

或者如果输出ls -l是以下格式(其中日期包括月份名称):

-rw-r--r-- 1 root    root      0 Jul  1 06:25 alternatives.log
-rw-r--r-- 1 root    root    280 Jul  1 03:26 alternatives.log.1
-rw-r--r-- 1 root    root    179 Jun  9 03:15 alternatives.log.2.gz
-rw-r--r-- 1 root    root    294 Jan 12  2016 alternatives.log.3.gz
-rw-r--r-- 1 root    root    259 Oct  8  2015 alternatives.log.4.gz
-rw-r--r-- 1 root    root   2970 Sep  3  2015 alternatives.log.5.gz
-rw-r--r-- 1 root    root   2288 Aug 27  2015 alternatives.log.6.gz

我们可以用:

ls -l | grep -Po '(\d+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)' | cut -d" " -f1

grep 中的其中一项:

-P interprets the pattern as a Perl regular expression (PCRE) 
-o prints only the matched string

答案3

您可能正在寻找stat命令。stat -f '%z' filename显示文件的大小。

您可以结合使用递归方式深入目录结构来获取所有文件大小。以下是使用的示例find

find . -type f -exec stat -f ' + %z' {} \; | xargs expr 0

第一部分stat -f ' + %z'对目录(及其所有子目录)中的每个文件运行。请考虑以下结构:

$ ls -l
total 32
-rw-r--r--  1 eric  staff  2 Aug 21 18:13 a
-rw-r--r--  1 eric  staff  4 Aug 21 18:13 b
-rw-r--r--  1 eric  staff  6 Aug 21 18:13 c
-rw-r--r--  1 eric  staff  8 Aug 21 18:13 d

上面的例子find有这样的输出:

$ find . -type f -exec stat -f ' + %z' {} \;              
 + 2
 + 4
 + 6
 + 8

xargs expr 0表示采用这些行并形成以下命令:

expr 0 + 2 + 4 + 6 + 8

总共产生 20 个字节。由于您使用了find而不是仅仅stat -f ' + %z' *,因此它也可以处理子目录中的文件。

相关内容