如何在 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' *
,因此它也可以处理子目录中的文件。