使用du获取目录的总大小作为数字

时间:2015-01-07 12:18:35

标签: string bash cut

使用命令du,我想获得目录的总大小

输出命令du myfolder

5454 kkkkk
666  aaaaa
3456788 total

我能够提取最后一行,但不能删除字符串total

du -c myfolder | grep total | cut -d ' ' -f 1

结果:

3456788 total

期望的结果

3456788

我想将所有命令放在一行中。

4 个答案:

答案 0 :(得分:1)

首先,您可能希望使用tail -n1而不是grep total ...请考虑如果您有一个名为local的目录会发生什么? :-)

现在,让我们看一下du hexdump的输出:

$ du -c tmp | tail -n1 | hexdump -C
00000000  31 34 30 33 34 34 4b 09  74 6f 74 61 6c 0a        |140344K.total.|

那是0x09之后的字符Kman ascii告诉我们:

   011   9     09    HT  '\t' (horizontal tab)   111   73    49    I

这是一个标签,而不是空格: - )

制表符已经是默认分隔符(这在POSIX规范中指定,因此您可以安全地依赖它),因此您根本不需要-d

所以,把它放在一起,我们最终得到:

$ du -c tmp | tail -n1 | cut -f1
140344K

答案 1 :(得分:1)

这可能是因为它的制表符分隔(这是剪切的默认分隔符):

~$ du -c foo | grep total | cut -f1
4
~$ du -c foo | grep total | cut -d'   ' -f1
4

要插入标签,请使用Ctrl + v,然后使用TAB

或者,您可以使用awk打印以total结尾的行的第一个字段:

~$ du -c foo | awk '/total$/{print $1}'
4

答案 2 :(得分:1)

为什么不使用-s对其进行总结?这样您就不必grep "total"

$ du .
24  ./aa/bb
...
       # many lines
...
2332    .
$ du -hs .
2.3M    .

然后,要获得该值,请输入awk。这样您就不必担心分隔符是空格或制表符:

du -s myfolder | awk '{print $1}'

来自man du

   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)

   -s, --summarize
          display only a total for each argument

答案 3 :(得分:0)

我建议使用awk:

value=$(du -c myfolder | awk '/total/{print $1}')

这只是提取与模式匹配的第一个字段" total"。

如果它始终是你感兴趣的最后一行,那么另一种方法就是使用它:

value=$(du -c myfolder | awk 'END{print $1}')

最后一行中的字段值可以在END块中访问,因此您可以通过这种方式获取最后一行的第一个字段。